【问题标题】:django : 404 (main.urls not included in myproject/urls.py?)django:404(main.urls 未包含在 myproject/urls.py 中?)
【发布时间】:2015-05-10 22:18:16
【问题描述】:

我有以下问题:

我制作了一个小 django (1.7.8) 项目(名为 djangocmstest)来测试 django-cms(但它可能只与 django 相关,我'我不确定)。

我尝试访问 localhost:8000/one 并得到以下问题:

Page not found (404)
Request Method:     GET
Request URL:    http://127.0.0.1:8000/one/

Using the URLconf defined in djangocmstest.urls, Django tried these URL patterns, in this order:

    ^en/
    ^media\/(?P<path>.*)$

The current URL, one/, didn't match any of these.

我制作了以下文件:

djangocmstest/urls.py:

我按照建议添加了url(r'^/', include('cms.urls')), here

from django.conf.urls import patterns, include, url
from django.contrib import admin
from django.conf import settings
from django.conf.urls.i18n import i18n_patterns
from django.conf.urls.static import static

urlpatterns = i18n_patterns('',
                       url(r'^admin/', include(admin.site.urls)),
                       # Please note that I'm not sure how to handle
                       # the order of the two following lines.
                       url(r'^/', include('main.urls')),
                       url(r'^/', include('cms.urls')),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

ma​​in/urls.py:

from django.conf.urls import patterns, include, url
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = patterns('main.views',
    url(r'^one/$', 'template_one'),
)

由于某种原因,ma​​in/urls.py 文件内容似乎没有包含在 djangocmstest/urls.py 中。

我该如何解决这个问题?

编辑: 在浏览器(“.../en/one”)中使用正确的 URL(由 @catavaran 建议),我得到以下信息:

Page not found (404)
Request Method:     GET
Request URL:    http://127.0.0.1:8000/en/one

Using the URLconf defined in djangocmstest.urls, Django tried these URL patterns, in this order:

    ^en/ ^admin/
    ^en/ ^/
    ^en/ ^/
    ^media\/(?P<path>.*)$

The current URL, en/one, didn't match any of these.

编辑 2(已修复): 我现在有这些文件(它可以工作:)):

ma​​in/urls.py:

from django.conf.urls import patterns, include, url
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = patterns('main.views',
    url(r'^one/$', 'template_one'),
)

djangocmstest/urls.py:

from django.conf.urls import patterns, include, url
from django.contrib import admin
from django.conf import settings
from django.conf.urls.i18n import i18n_patterns
from django.conf.urls.static import static

urlpatterns = i18n_patterns('',
                       url(r'^admin/', include(admin.site.urls)),
                       url(r'^', include('main.urls')),
                       url(r'^', include('cms.urls')),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

【问题讨论】:

    标签: python django django-cms


    【解决方案1】:

    在项目的urls.py 中,您使用i18n_patterns 而不是简单的patterns,因此您页面的网址应该是:

    /en/one/
    

    更新:从项目的urls.py 中的正则表达式中删除尾部斜杠。所以正则表达式应该是r'^',而不是r'^/'

    urlpatterns = i18n_patterns('',
                           url(r'^admin/', include(admin.site.urls)),
                           url(r'^', include('main.urls')),
                           url(r'^', include('cms.urls')),
    ) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    

    【讨论】:

    • 可能是这样,我没想到。您的意思是在浏览器中输入“.../en/one”吗?或者我也应该将 main/urls.py* 中的 ^one/$ 替换为 ^/en/one$?我应该让这两个包含在 djangocmstest/urls.py* 中的顺序是什么?这个顺序正确吗?
    • 我的意思是在浏览器中输入/en/one/。包含的顺序是正确的,并且使用相同的正则表达式包含也正确。将尾部斜杠添加到 url 时会发生什么? (/en/one/ 而不是/en/one
    • 如果我在 url 的末尾添加一个斜杠,什么都不会发生。
    • 我明白了,您在项目 url 模式中使用了错误的正则表达式。请参阅我的答案中的更新。
    • 查看问题第一次编辑中的错误页面。正则表达式是串联的。 "en/" + "admin/" == "en/admin/" - 一个非常有效的网址。另一方面"en/" + "/" == "en//"。这就是为什么您应该从“空”正则表达式中删除斜杠 - "en/" + "" == "en/"
    【解决方案2】:

    main.urlscms.urls 的正则表达式不应包含正斜杠:

    urlpatterns = i18n_patterns('',
                           url(r'^admin/', include(admin.site.urls)),
                           # Please note that I'm not sure how to handle
                           # the order of the two following lines.
                           url(r'^', include('main.urls')),
                           url(r'^', include('cms.urls')),
    ) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    

    此外,当您执行查询时,请确保它是针对

    http://127.0.0.1:8000/en/one/
    

    因为您的 main.urls 文件中确实有一个斜杠。

    【讨论】:

    • 就是这样。 catavaran 已经建议了,但也谢谢你。 :)
    • 很高兴为您提供帮助。在我提交答案时,catavaran 的答案仍然显示他的答案版本,该版本仅涉及 i18n_patterns 位。否则,我不会提交答案。
    【解决方案3】:

    您正在使用具有相同正则表达式的两个包含。这样包含将不起作用。试试这个:

    from django.conf.urls import patterns, include, url
    from django.contrib import admin
    from django.conf import settings
    from django.conf.urls.i18n import i18n_patterns
    from django.conf.urls.static import static
    
    urlpatterns = i18n_patterns('',
                           url(r'^admin/', include(admin.site.urls)),
                           # Please note that I'm not sure how to handle
                           # the order of the two following lines.
                           url(r'^cms/', include('cms.urls')),
                           url(r'^/', include('main.urls')),
    
    ) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    

    【讨论】:

    • 感谢您的回答,但情况恰恰相反:main 是应用程序,djangocmstest 是项目。
    • 我不确定如何使用这些。所以我应该只使用其中一个?哪一个?其他的怎么用?我应该在 cms.urls 中包含 main/urls.py 吗?
    • 我的 URL 应该看起来像 localhost:8000/en/one (就像 catavaran 说的那样)。 cms 在这里阅读我的 URL 的第一部分(我将对我的问题进行编辑以添加我使用正确 URL 获得的新问题)。所以我不确定 cms.urls 是否应该绑定到 '^/cms' 正则表达式。
    • 所以我的问题是:你安装了什么?什么是“cms”应用程序?它是你需要有一个 URL 的东西,还是只是一个应用程序?我现在看的方式,i18n 将预先设置语言环境字符串,然后将包括“admin”、“cms”、“main”应用程序,并且“/en/one”将匹配定义的“one”url 模式在 main.urls 上。
    • 我在我的问题中添加了两个链接,一个指向 django-cms 网站,一个指向其文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 2020-08-29
    • 2021-10-17
    • 2021-07-29
    相关资源
    最近更新 更多