当我的服务器运行时,我在命令行上收到以下信息并导航到http://127.0.0.1:8000/terms
:
[19/Jun/2015 18:09:04]"GET /terms HTTP/1.1" 302 0
[19/Jun/2015 18:09:05]"GET /terms HTTP/1.1" 302 0
[19/Jun/2015 18:09:05]"GET /terms HTTP/1.1" 302 0
[19/Jun/2015 18:09:06]"GET /terms HTTP/1.1" 302 0
[19/Jun/2015 18:09:07]"GET /terms HTTP/1.1" 302 0
[19/Jun/2015 18:09:07]"GET /terms HTTP/1.1" 302 0
[19/Jun/2015 18:09:08]"GET /terms HTTP/1.1" 302 0
[19/Jun/2015 18:09:08]"GET /terms HTTP/1.1" 302 0
这种输出会一直持续,直到我手动退出/退出服务器会话。
我不确定为什么会这样。我对Django很新,所以也许我忽视了一些明显的事情。
以下是terms
中的views.py
视图:
def terms(request):
if request.method == 'GET':
return redirect(terms)
这是terms
中urls.py
的路线:
url(r'^terms/', 'my_app.views.terms'),
我还在模板文件夹中创建了一个terms.html
模板,其中包含一些虚拟文本。
为什么这不起作用?
我知道有更简单的方法可以做到这一点,但我想知道为什么这种特殊方式不起作用。我试图理解如何将条件语句放在使用请求库的视图中,以便我在以后的项目中执行更复杂的操作。
我误解了什么?
答案 0 :(得分:2)
HTTP status code 302用于重定向。您似乎正在从terms
重定向回terms
并创建无限循环。
你的意思是重定向吗?如果是这样,你指的是重定向到哪里?
您可以重定向到对象:
def my_view(request):
...
object = MyModel.objects.get(...)
return redirect(object)
或另一种观点:
def my_view(request):
...
return redirect('some-view-name', foo='bar')
或相对网址:
def my_view(request):
...
return redirect('/some/url/')
或绝对网址:
def my_view(request):
...
return redirect('http://example.com/')
查看redirect docs了解详情。
如果您不想重定向,则可能需要return
以下其中一项:HttpResponse(),render()或render_to_response()。请务必在视图中指定您的模板(terms.html
)。
如果工作量减少,请使用class-based views。