Django - 模板未加载,永久302消息

时间:2015-06-20 01:24:09

标签: python django

当我的服务器运行时,我在命令行上收到以下信息并导航到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)

这是termsurls.py的路线:

url(r'^terms/', 'my_app.views.terms'),

我还在模板文件夹中创建了一个terms.html模板,其中包含一些虚拟文本。

为什么这不起作用?

我知道有更简单的方法可以做到这一点,但我想知道为什么这种特殊方式不起作用。我试图理解如何将条件语句放在使用请求库的视图中,以便我在以后的项目中执行更复杂的操作。

我误解了什么?

1 个答案:

答案 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