【发布时间】:2018-12-20 20:51:26
【问题描述】:
我是 Django 新手,我想为不需要模型的活动尝试 FBV。这最终将使用用户定义的参数实现搜索并在模板中显示结果,但现在我的模板和视图基本上是空的以显示此问题。
我正在使用 python 3.6 和 Django 2.1.3。
教程直接指向 CBV,我很难获得有关 FBV 方式的好信息。
File: 'positivepets/picture_search.html':
-------
{% extends 'positivepets/base.html' %}
{% block body %}
<p> You have reached the picture search page </p>
{% endblock %}
File: urls.py
--------
app_name = 'positivepets'
urlpatterns = [...
url(r'^picture_search/$', views.misc_views.picture_search, name='picture_search'),
...]
File: misc_views.py
--------
def picture_search(request):
return render(request, 'positivepets/picture_search.html')
问题
这一切正常并呈现模板picture_search.html。
我的问题是我想避免对模板名称进行硬编码。我认为这会起作用:
def picture_search(request):
return HttpResponseRedirect(reverse('positivepets:picture_search'))
这会将用户带到http://127.0.0.1:8000/positivepets/picture_search/
但在 chrome 中产生“重定向过多”错误。我想我只是在告诉它一遍又一遍地重定向到自己。
问题
我在哪里指定 picture_search.html 是我想要呈现的模板,而不在视图中对其进行硬编码?
看来答案应该在reverse,但我只能找到reverse()的CBV例子,而且我认为它适用于CBV,因为在类定义中设置了一个template_name属性。当然,FBV 没有。
我希望这对于有一些 FBV 经验的人来说是一件容易的事。
【问题讨论】:
-
这里你重定向到函数本身,所以重定向,将触发相同的视图再次,因此另一个重定向,等等。
标签: django view django-templates