Django(夹层)网址捕捉一切
Django (mezzanine) urls catching everything
我正在 django 项目的管理中编写一些自定义视图,应该很简单。我有一个 "events" 页面,我想创建一个 "event" 页面(与 django 投票教程完全相同,但在管理员中,事件页面将与详细视图相同。)
不,我不能使用外键等正常使用内置功能,需要从头开始构建。
urls.py:
admin.autodiscover()
def get_admin_urls(urls):
def get_urls():
my_urls = [
url(r'^my_cms/events', views.events, name="events"),
url(r'^my_cms/events/(?P<event_id>[0-9]+)/$', views.detail, name='detail'),
]
return my_urls + urls
return get_urls
admin_urls = get_admin_urls(admin.site.get_urls())
admin.site.get_urls = admin_urls
urlpatterns = i18n_patterns("",
("^admin/", include(admin.site.urls)),
)
所以..
访问 .../admin/my_cms/events/ 作品
但是.../admin/my_cms/events/xxxxxx 只显示相同的事件页面,而不是详细视图
如果我将 url 模式更改为 "events" 以外的任何模式,例如:
url(r'^my_cms/events', views.events, name="events"),
url(r'^my_cms/[anything]/(?P<event_id>[0-9]+)/$',
然后它将正确显示事件视图...
所以我的问题是为什么第一个 url 捕获所有内容?我可以放任何东西 (.../admin/my_cms/events/anythingilike) 它会显示活动页面?
乔
因为 r'^my_cms/events'
末尾没有 $
。这意味着,只检查此 URL 的开头,而不检查结尾。
为了说明,r'^my_cms/events'
将匹配任何以 'my_cms/events'
开头的 URL,例如:
'my_cms/events'
'my_cms/events/xxxxxx'
'my_cms/eventsxxxxxx'
因此,即使您向 'my_cms/events/xxxxxx'
处的详细视图发出请求,也会匹配事件页面 URL。一旦 Django 找到匹配项,它不会进一步检查 URLs 并调用相关视图。
要修复,请在 URL 正则表达式的末尾添加一个 $
符号,如下所示:
url(r'^my_cms/events/$', views.events, name="events"),
我正在 django 项目的管理中编写一些自定义视图,应该很简单。我有一个 "events" 页面,我想创建一个 "event" 页面(与 django 投票教程完全相同,但在管理员中,事件页面将与详细视图相同。) 不,我不能使用外键等正常使用内置功能,需要从头开始构建。
urls.py:
admin.autodiscover()
def get_admin_urls(urls):
def get_urls():
my_urls = [
url(r'^my_cms/events', views.events, name="events"),
url(r'^my_cms/events/(?P<event_id>[0-9]+)/$', views.detail, name='detail'),
]
return my_urls + urls
return get_urls
admin_urls = get_admin_urls(admin.site.get_urls())
admin.site.get_urls = admin_urls
urlpatterns = i18n_patterns("",
("^admin/", include(admin.site.urls)),
)
所以.. 访问 .../admin/my_cms/events/ 作品 但是.../admin/my_cms/events/xxxxxx 只显示相同的事件页面,而不是详细视图
如果我将 url 模式更改为 "events" 以外的任何模式,例如:
url(r'^my_cms/events', views.events, name="events"),
url(r'^my_cms/[anything]/(?P<event_id>[0-9]+)/$',
然后它将正确显示事件视图...
所以我的问题是为什么第一个 url 捕获所有内容?我可以放任何东西 (.../admin/my_cms/events/anythingilike) 它会显示活动页面?
乔
因为 r'^my_cms/events'
末尾没有 $
。这意味着,只检查此 URL 的开头,而不检查结尾。
为了说明,r'^my_cms/events'
将匹配任何以 'my_cms/events'
开头的 URL,例如:
'my_cms/events'
'my_cms/events/xxxxxx'
'my_cms/eventsxxxxxx'
因此,即使您向 'my_cms/events/xxxxxx'
处的详细视图发出请求,也会匹配事件页面 URL。一旦 Django 找到匹配项,它不会进一步检查 URLs 并调用相关视图。
要修复,请在 URL 正则表达式的末尾添加一个 $
符号,如下所示:
url(r'^my_cms/events/$', views.events, name="events"),