django:404(main.urls 未包含在 myproject/urls.py 中?)

django : 404 (main.urls not included in myproject/urls.py?)

我有以下问题:

我做了一个小的 django (1.7.8) 项目(名为 djangoccmstest)来测试 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)

main/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'),
)

由于某些原因,main/urls.py 文件内容似乎没有包含在 djangocmstest/urls.py[ 中=59=].

我该如何解决这个问题?

编辑: 在浏览器(“.../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(已修复): 我现在有这些文件(并且有效 :)):

main/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)

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

/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)

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

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.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 文件中确实有尾部斜杠。