我是Django的新手,我想为不需要Model的活动尝试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经验的人来说这是一个简单的选择。
答案 0 :(得分:0)
我认为做您想做的事情没有任何好处。您必须告诉django您想要在某处按名称命名的模板。如果您不这样做,而是在代码的其他地方,则仅添加了一个抽象层,没有任何净收益。
即
def picture_search(request):
return render(request, reverse('some_pointer'))
some_pointer = 'picture_search'
-您仍然必须对其进行硬编码
=没有好处
相反的功能是从视图或标签获取URL。
该网址的末尾是一些用于渲染具有模板名称的模板的函数。