使用 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
我的 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