好的,在稍微摆弄并安装debug_toolbar之后,删除以下行后问题就消失了,
urlpatterns = patterns('',
# some other patterns
url(r'^(?P<tag_name>.+)/$','myapp.views.tag_details',name = 'tag_details'),#<<---
#!!! removing above line solves the problem
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += patterns(
'django.contrib.auth.views',
url(r'^login/', 'login',
{'template_name' : 'login.html'},
name = 'constituency_login'),
url(r'^logout/', 'logout',
{'next_page' : 'constituency_login'},
name = 'constituency_logout'),
)
为什么它会破坏我的登录和注销模式?
我已经实施了一段时间的登录和注销,现在我突然尝试实现其他功能时,登录和注销都没有以某种方式显示。
我可以通过管理员登录,该网站可以显示我已登录但登录了#39;网址显示空白页面并退出&#39;什么都不做。
以下是我实施的方式:
项目文件夹中的urls.py
urlpatterns += patterns(
'django.contrib.auth.views',
url(r'^login/', 'login',
{'template_name' : 'login.html'},
name = 'myapp_login'),
url(r'^logout/', 'logout',
{'next_page' : 'myapp_login'},
name = 'myapp_logout'),
)
模板/ login.html的
{% extends "base.html" %}
{% load staticfiles %}
{% block content%}
{% if form.errors %}
<p class="alert"> Your username and/or password didn't match </p>
{% endif%}
<form method="post" action="{% url 'django.contrib.auth.views.login' %}">
{% csrf_token %}
<div class="input-group ">
<span class="input-group-addon" ><span class="glyphicon glyphicon-user"></span></span>
<input type="text" class="form-control" placeholder="Username" id="{{ form.username.id_for_label }}" maxlength="30" name="{{ form.username.html_name }}" />
</div>
<div class="input-group ">
<span class="input-group-addon" ><span class="glyphicon glyphicon-lock"></span></span>
<input type="password" class="form-control" placeholder="Password" id="{{ form.password.id_for_label }}" name="{{ form.password.html_name }}" type="text" />
</div>
<input class="btn" type="submit" value="login" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
</div>
</div>
</div>
{% endblock %}
settings.py
LOGIN_URL = 'myapp_login'
LOGOUT_URL = 'myapp_logout'
LOGIN_REDIRECT_URL = 'index'
我还没有改变其中的任何一个。事实上,从那时起我就添加了多个功能。
答案 0 :(得分:2)
Django总是返回urlpatterns
中的第一个正则表达式匹配。您的tag_details
视图的正则表达式与.+
的所有非空模式匹配。当您的登录和退出网址位于网址模式中的tag_details
视图之后,两个视图都会与您的tag_details
视图匹配。
您必须确保您的tag_details
视图在您的模式中排在最后,或者使用一些前缀,例如/tag/<tag>/
。将正则表达式模式设置为尽可能限制也是一种好习惯。如果您不允许在标记名称中使用特殊字符,即斜杠等,则最好使用r'^(?P<tag_name>[\w]+)/$'
之类的模式。