使用 Django 包含额外 url 模式时出现 404 错误

404 error on including extra url patterns with Django

我的 django 应用程序遇到了一个基本的 404 错误问题,我无法解决...也许有人可以给我提示?

所以我的问题如下:我目前正在开发一个网站,其中包含针对多个 phone 服务的分析工具。每个服务在数据库中都有自己的 serviceid 号,以便能够单独对其进行分析。因此,我使用相对 url 而不是对所有内容进行硬编码,因为它是最聪明的解决方案,为我的 views.py.

提供 serviceid

我认为使用相对 url 将是最佳解决方案,因为每个服务都以完全相同的方式进行分析。我设法在模板页面的 html 中做到了,但是当我调用这些网页之一时,我发现了 404 错误。例如,当我调用 portal/desiractif/duree 时,它是一个 404 错误,但是当我单独调用 portal/desiractif 时,它正在工作...

我以https://docs.djangoproject.com/en/1.8/topics/http/urls/#including-other-urlconfs为例。

这是我的 urls.py :

from django.conf.urls import include, url
from django.contrib import admin

extra_patterns = [
    url(r'^$', "analytics.views.service_views.service_index"),
    url(r'^duree/$', "analytics.views.service_views.service_duree"),
    url(r'^fixevsmobile/$', "analytics.views.service_views.service_fixvsmobile"),
]

urlpatterns = [
    ....
    url(r'^portal/desiractif/$', include(extra_patterns), {'serviceid' : serviceid}),
    ....
]

这里是我的 html 代码的一部分,其中包含页面之间的相关链接:

<ul class="nav nav-pills nav-stacked">
   <li role="presentation"><a href="">Index</a></li>
   <li role="presentation"><a href="fixevsmobile">Fixe vs mobile</a></li>
   <li role="presentation"><a href="#">Behaviour</a></li>
   <li role="presentation"><a href="#">Rappels</a></li>
   <li role="presentation"><a href="duree">Time</a></li>
</ul>

换句话说,相对 html 链接有效,但 Django returns 404 错误。

url(r'^portal/desiractif/'...

最后去掉$

应该是:

from django.conf.urls import include, url
from django.contrib import admin

extra_patterns = [
    url(r'^$', "analytics.views.service_views.service_index"),
    url(r'^duree/$', "analytics.views.service_views.service_duree"),
    url(r'^fixevsmobile/$', "analytics.views.service_views.service_fixvsmobile"),
]

urlpatterns = [
    ....
    # Remove the '$' at the end of regex expression
    url(r'^portal/desiractif/', include(extra_patterns), {'serviceid' : serviceid}),
    ....
]

r'^portal/desiractif/$' 的末尾不应该有 $ 这会导致正则表达式只匹配模式 portal/desiractif/ 而不是后面的任何内容portal/desiractif/....。由于正则表达式无法将请求的 url 与任何 url 模式匹配,因此它 returns 404 error

$(美元符号):

$ 匹配字符串的结尾。多行模式下表示当前行结束,否则表示字符串结束。

如果我的正则表达式是 b$,那么它将匹配字符串末尾的 b

'b'     # Matches 'b' in 'b'
'ab'    # Matches 'b' in 'ab'
'abc'   # Does not match