django url 正则表达式不匹配

Posted

技术标签:

【中文标题】django url 正则表达式不匹配【英文标题】:django url regex doesn't match 【发布时间】:2011-08-17 17:50:58 【问题描述】:

在开发服务器上使用 Django 1.3

我尝试联系:http://127.0.0.1:8000/lang/en

答案是:

使用定义在 pruebas.urls,Django 尝试了这些 URL 模式,按以下顺序:

    ^admin/ ^correo/$ ^登录/$ ^lang/(?P\w+)/$ ^site_static/(?P.*)$

当前网址 , 不匹配任何 这些。

这是我的“urls.py”:

from pruebas import settings
from django.conf.urls.defaults import *


# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'pruebas.views.home', name='home'),
    # url(r'^pruebas/', include('pruebas.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
    (r'^correo/$', 'mailclient.views.index'),
    (r'^login/$', 'kusers.views.klogin'),

    # Language change
    (r'^lang/(?P<lang_code>\w+)/$', 'kusers.views.lang'),    

)




if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^site_static/(?P<path>.*)$', 'django.views.static.serve',  
         'document_root':     settings.STATIC_ROOT),)

我认为那行:

(r'^lang/(?P\w+)/$', 'kusers.views.lang'),

将与“http://127.0.0.1:8000/lang/en”匹配,但似乎我错了。

提前致谢

kurs/views.py 中的代码是:

def lang(request, lang_code):
    request.session['django_language'] = lang_code
    return HttpResponseRedirect( "/" )

已解决。

问题不在于 urls.py 配置。问题在于“kuser”应用程序文件夹结构。

谢谢

【问题讨论】:

你的lang查看代码是什么样的? 【参考方案1】:

如果你在 url 上加上一个斜杠,它就会起作用,如下所示:

http://127.0.0.1:8000/lang/en/

【讨论】:

末尾的$符号表示表达式必须以给定的表达式结尾。如果没有 $,/lang/en/blah 也会匹配。另外,请尝试在您的 settings.py 中添加 APPEND_SLASH = True,如docs 中所述

以上是关于django url 正则表达式不匹配的主要内容,如果未能解决你的问题,请参考以下文章

匹配另一个 url - 正则表达式 django urls

django url 正则表达式匹配可选参数

Django url正则表达式匹配但找不到页面错误

第61篇 Django 路由系统 正则表达式和二级路由 路由的命名和反向解析

调整 Django URL 中的正则表达式以匹配文件路径

Django框架之正则表达式URL误区