问题
I have a fairly simple model that uses Django Taggit for tagging.
Everything works great, but now I'd like to expand some functionality and I'm a little confused.
What I want is two views.
One that shows all my tags in the system. One that shows all the content from my app with a specific tag.
What makes sense to me is to do the following for each view.
in views.py for myapp
All Tags
from myapp.models import App
from taggit.models import Tag
class TagList(ListView):
""" Get all the tags in the db """
queryset = Tag.objects.all() template_name = "myapp/TagList.html" paginate_by = 10
All content for a Tag
from myapp.models import App
from taggit.models import Tag
class TaggedList(ListView): """ Get all the contet for a tag """
template_name = "myapp/TaggedList.html" def get_object(self): return get_list_or_404(App, tag__iexact=self.kwargs['tag'])
Have I lost my mind or is it really that easy? BTW, I'm using generic class views.
Thanks for the help. Dave
回答1:
2. I believe this is for returning a single object, not multiple objects.
def get_object(self):
Instead perhaps you should try something like the following:
def get_queryset(self):
return TaggedItem.objects.filter(tag__iexact=self.kwargs['tag'])
This returns a list of items with GenericForeignKeys
If you are only interested in a specific model called App then
return App.objects.filter(tags__name__in=[self.kwargs['tag']])
Default variable name in the template is TaggedItem_list then
{% for item in TaggedItem_list %}
{{item.content_object}} {# generic foreign key here #}
{% endfor %}
The urls.py would have to be similar to
url(r'someapp/(?P<tag>\w+)/$', TaggedList.as_view())
来源:https://stackoverflow.com/questions/8314979/how-do-i-create-list-and-detail-views-for-django-taggit