문제

I'm using the django-tagging-0.3.1 package to tag all the articles in my website. But I just found that this package seems not to support whitespace in tag name, which means when a tag name has whitespace in it and you use the function it provides, TaggedItem.objects.get_by_model, to search all the articles with this tag, you will get an empty list. But actually I checked my server and the tag name is shown and associated with the corresponding articles correctly. So is there any way I can configure to make the space-contained-tag search work? Thanks.

도움이 되었습니까?

해결책

The problem appears to be in the get_tag_list utility function, which is called by get_by_model. If passed a string (such as 'my tag with spaces'), it will return the following query:

Tag.objects.filter(name__in=parse_tag_input(tags))

Unfortunately, the parse_tag_input function assumes that space-separated words are different tags, so it will assert that you are searching for the tags ['my', 'tag', 'with', 'spaces'], which will of course not return anything.

Later in the get_tag_list function, there's a check to see if the input is a list/tuple:

elif isinstance(tags, (types.ListType, types.TupleType)):
    ...

The code following it does not call parse_tag_input (I guess it assumes that each string within the list/tuple is a fully-formed tag).

TL;DR: Thus, I believe that if you pass a tuple or a list containing the tag name, it will correctly find it.

TaggedItem.object.get_by_model(MyModel, ['my tag with spaces'])
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top