Django 1.8基于变量的动态url配置

时间:2015-06-21 03:59:32

标签: python django

这似乎在django中无效:

urlpatterns = [
    url(r'^%s/admin/' %(BASE_PATH), include(admin.site.urls)),
    url(r'^%s/$' %(BASE_PATH), home_view),
    url(r'^%s/ping/$' %(BASE_PATH), ping),
    url(r'^%s/echo/$' %(BASE_PATH), echo),
    url(gcd_str, gcd),
]

如果我将BASE_PATH设置为' test'并转到http://host/test/echo我收到404错误,但我的路径在错误页面上显示如下:

^/test/admin/
^/test/$
^/test/ping/$
^/test/echo/$
^/test/gcd/$

如果我像这样硬编码就可以了:

urlpatterns = [
    url(r'^test/admin/', include(admin.site.urls)),
    url(r'^test/$', home_view),
    url(r'^test/ping/$', ping),
    url(r'^test/echo/$', echo),
]

我猜这个模式没有正确插值,如果我使用不带r的字符串,它似乎行为相同。

1 个答案:

答案 0 :(得分:1)

问题是您要将BASE_PATH设置为

/test

当您进行硬编码时,您将其写为

test

起始/会产生重大影响,因为url模式需要(根据BASE_PATH是以

开头的那个)
^/test/admin/
|| |
|| matches test
|matches /
matches start of the pattern