直接GET好不好?如何制作?
Is direct GET good? How to make it?
我有一个处理 ListView 和 from 的视图,它使用 GET 和 returns 根据同一页面上的标签过滤内容。在这里:
class AllView(AjaxListView):
context_object_name = 'smth'
template_name = 'blog/all_things.html'
page_template = 'blog/things.html'
def get_queryset(self):
form = TagForm(self.request.GET)
if form.is_valid():
self.tag_name = (form.cleaned_data['tag']).lower()
return self.send_results(self.tag_name)
else:
self.tag_name = "All"
return Fact.objects.all()
def get_context_data(self, **kwargs):
context = super(AllView, self).get_context_data(**kwargs)
if 'TagForm' not in context:
context['TagForm'] = TagForm()
context['tag'] = self.tag_name
return context
def send_results(self, tag):
return Fact.objects.filter(tags__slug=tag)
现在,我想做同样的事情,但使用简单的 link。
例如,我有 <a>Food</a>
,我希望它转到 ?tag=food
。我做了一件非常愚蠢的事情,但它有效:
URL:
url(r'^(?P<tag>[\w-]+)$', views.TagView, name='tag'),
查看:
def TagView(request, tag):
# change this someday...
return HttpResponseRedirect(reverse('blog:all') + '?tag={}'.format(tag))
我知道这是愚蠢的,那么有什么明智的方法吗?
如果我没理解错的话,您不需要第二个视图和 url 模式。您可以检查 'tag' 参数是否存在并根据该参数创建查询集。
def get_queryset(self):
if self.request.GET.get('tag'):
self.tag_name = self.request.GET['tag']
return self.send_results(self.tag_name)
else:
self.tag_name = "All"
return Fact.objects.all()
对于模板 HTML 中的硬编码 link,您可以使用:
<a href="{% url 'your_view' %}?tag=AAA">Tag AAA</a>
我有一个处理 ListView 和 from 的视图,它使用 GET 和 returns 根据同一页面上的标签过滤内容。在这里:
class AllView(AjaxListView):
context_object_name = 'smth'
template_name = 'blog/all_things.html'
page_template = 'blog/things.html'
def get_queryset(self):
form = TagForm(self.request.GET)
if form.is_valid():
self.tag_name = (form.cleaned_data['tag']).lower()
return self.send_results(self.tag_name)
else:
self.tag_name = "All"
return Fact.objects.all()
def get_context_data(self, **kwargs):
context = super(AllView, self).get_context_data(**kwargs)
if 'TagForm' not in context:
context['TagForm'] = TagForm()
context['tag'] = self.tag_name
return context
def send_results(self, tag):
return Fact.objects.filter(tags__slug=tag)
现在,我想做同样的事情,但使用简单的 link。
例如,我有 <a>Food</a>
,我希望它转到 ?tag=food
。我做了一件非常愚蠢的事情,但它有效:
URL:
url(r'^(?P<tag>[\w-]+)$', views.TagView, name='tag'),
查看:
def TagView(request, tag):
# change this someday...
return HttpResponseRedirect(reverse('blog:all') + '?tag={}'.format(tag))
我知道这是愚蠢的,那么有什么明智的方法吗?
如果我没理解错的话,您不需要第二个视图和 url 模式。您可以检查 'tag' 参数是否存在并根据该参数创建查询集。
def get_queryset(self):
if self.request.GET.get('tag'):
self.tag_name = self.request.GET['tag']
return self.send_results(self.tag_name)
else:
self.tag_name = "All"
return Fact.objects.all()
对于模板 HTML 中的硬编码 link,您可以使用:
<a href="{% url 'your_view' %}?tag=AAA">Tag AAA</a>