【问题标题】:django urls that aren't defined未定义的 django url
【发布时间】:2013-03-25 04:34:43
【问题描述】:

我遇到了一个问题,即“不存在”的网址能够显示。例如,我转到 /myapp/login 的一个 url,它可以工作。然后我去 /myapp/login/login ,它仍然有效。然后我去 /myapp/insertrandomcharactershere/login 它仍然有效。这适用于我在 /myapp/ 的子路径中的每个 url,因此 /myapp/register、/myapp/login 和 /myapp/myaccount。似乎只要它以我的 urlconf 中的名称结尾,它就可以工作。我一直无法解决这个问题,所以我从我的登录页面和我的 urlconfs 添加了一些代码,希望能包含这个问题。

我应该对任何不是 /myapp/、/myapp/login/、/myapp/register/、/myapp/myaccount/ 的东西进行 404 处理

http://paste.pound-python.org/show/31613/

#django/urls.py
urlpatterns = patterns('',
    url(r'myapp/', include('myapp.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

#myapp/urls.py
urlpatterns = patterns('myapp.views',
    url(r'^$', 'index', name='index'),
    url(r'register/$', 'register', name='register'),
    url(r'myaccount/$', 'myaccount', name='myaccount'),
    url(r'login/$', 'login_page', name='login'),
    url(r'logout/$', 'logout_user', name='logout')
)

#myapp/login.py
def login_page(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect(reverse('index'))
    form = LoginForm(request.POST or None)
    if form.is_valid():
        username = form.cleaned_data['username']
        username = username.capitalize()
        password = form.cleaned_data['password']
        try:
            User.objects.get(username=username)
        except:
            return render(request, 'myapp/login.html', {
                'form': form,
                'error': "Account doesn't exist"
                })
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                return HttpResponseRedirect(reverse('index'))
            else:
                return render(request, 'myapp/login.html', {
                    'form': form,
                    'error': 'Account is disabled or banned',
                    })
        else:
            return render(request, 'myapp/login.html', {
                'form': form,
                'form': 'Authentication Error!'
                })
    return render(request, 'myapp/login.html', {
        'form': form,
        })

{% if not user.is_authenticated %}

#myapp/templates/myapp/login.html
<strong>Login</strong>
<form action='{% url 'login' %}' method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Login">
</form>
{{ error }}
{% endif %}

【问题讨论】:

  • 你在myapp/login.py 中定义了login_page 然后你在urls.py 中使用myapp.views 前缀引用它,什么?

标签: python django url


【解决方案1】:

我认为网址缺少^

下一行:

url(r'login/$', 'login_page', name='login'),

应该是:

url(r'^login/$', 'login_page', name='login'),

【讨论】:

  • 这确实对我有用,只是想说感谢您提供的信息。
【解决方案2】:

您需要用“^”标记模式的开始。

例如:

urlpatterns = patterns('',
    url(r'^myapp/', include('myapp.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

#myapp/urls.py
urlpatterns = patterns('myapp.views',
    url(r'^$', 'index', name='index'),
    url(r'^register/$', 'register', name='register'),
    url(r'^myaccount/$', 'myaccount', name='myaccount'),
    url(r'^login/$', 'login_page', name='login'),
    url(r'^logout/$', 'logout_user', name='logout')
)

【讨论】:

    【解决方案3】:

    您需要在您的 url 中指定它应该以您希望在开头使用 '^' 的字符串开头。

    所以你可以更新你的 urls.py 行

    url(r'myapp/', include('myapp.urls')),
    

    url(r'^myapp/', include('myapp.urls')),
    

    您可能希望对myapp.urls 中的其他网址执行此操作。

    【讨论】:

      猜你喜欢
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-27
      • 2016-08-13
      • 1970-01-01
      • 2013-02-07
      相关资源
      最近更新 更多