Django url解析错误

时间:2015-07-22 14:05:18

标签: django django-urls

行, 我在项目网站范围内有两种不同的观点。

urls.py

url(r'^accounts/login/$', 'taxo.views.login'),
url(r'^accounts/invalid/$', 'taxo.views.invalid'),
...

taxo / views.py

def login(request):
    c = {}
    c.update(csrf(request))
    return render_to_response('login.html', c)
def invalid(request):
    return render_to_response('invalid.html',{'title':'invalid'})

模板/ login.html的

<form action="/accounts/auth/" method="post">{% csrf_token %}
   <label for="username">User name</label>
   <input type="text" name="username" value="" id="username">
   <label for="password">Password</label>
   <input type="password" name="password" value="" id="password">
   <input type="submit" value="login" />
</form>

模板/ invalid.html

<form style="float: right" action="accounts/login/" method="post">
  {% csrf_token %}
  {{form}}
  <input type="submit" value="Login" class="search"/>
</form>

使用上面的代码,我得到了Page not Found错误

Page not found (404)
Request Method: POST
Request URL: http://127.0.0.1:8000/accounts/invalid/accounts/login/

Django将请求的URL解析为相对于当前页面的url。当我用{% url %}标记替换操作时。我在错误

时收到了 NoReverseMatch

我该如何正确地做到这一点?

2 个答案:

答案 0 :(得分:1)

试试这个:

<form style="float: right" action="/accounts/login/" method="post">
  {% csrf_token %}
  {{form}}
  <input type="submit" value="Login" class="search"/>
</form>

答案 1 :(得分:0)

这就是原因:

Request URL: http://127.0.0.1:8000/accounts/invalid/accounts/login/
在正则表达式结束时,

$意味着什么都没有在斜线之后:

url(r'^accounts/login/$', 'taxo.views.login', name='login'),
url(r'^accounts/invalid/$', 'taxo.views.invalid', name='invalid'),

因此你可以使用这些网址:

http://127.0.0.1:8000/accounts/login/
http://127.0.0.1:8000/accounts/invalid/

编辑: 为什么模板重定向中的一个URL以斜线开头而一个没有?试试这个:

<form style="float: right" action="{% url 'login' %}" method="post">