【问题标题】:Can't find page in django在 django 中找不到页面
【发布时间】:2014-02-15 08:16:16
【问题描述】:

我目前正在学习 Django,我正在尝试添加表单来注册用户。

现在我的问题很早就开始了,因为每当我尝试访问我的注册页面时都会收到 404。

我的3个文件如下:

views.py : 只是一个基本显示的 hello world

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello World")

def registration(request):
    return HttpResponse("Registration page")

urls.py(在我的项目中):

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

from django.contrib import admin

urlpatterns = patterns('',
    (r'^$', include('myapp.urls')), # index with login/registration
    (r'^grappelli/', include('grappelli.urls')),  # grappelli URLS
    (r'^admin/',  include(admin.site.urls)),  # admin site
)

最后是 urls.py(在我的应用中):

from django.conf.urls import patterns, url

from myapp import views

urlpatterns = patterns('',
    url(r'^$',views.index, name='index'),
    url(r'^registration/$',views.registration, name='registration'),
)

当我转到我的正常索引 (localhost:8000) 时,它会显示我在 views.py 文件中编写的 hello world。但是,当我尝试进入注册页面时,它只会返回一个 404(localhost:8000/registration)。

现在正如我所说,我仍在学习这整件事,但我不明白为什么它不能正常工作。据我了解,项目文件中的 r'^$' 指向 localhost:8000 并且应用程序文件中的相同正则表达式告诉它在此位置加载索引页面。现在程序仍在 localhost:8000 中,r'^registration/' 应该正在加载 localhost:8000/registration 中的另一个页面,对吗?

如果你能向我解释为什么这不起作用以及我在哪里做错了,那就太好了。

这是我得到的错误:

当我服用

(r'^randomstringhere/', include('myapp.urls')), # index with login/registration

而不是

(r'^$', include('myapp.urls')), # index with login/registration

我可以通过 localhost:8000/randomstringhere/registration 进入注册页面。但是站点意味着有一个选择,您可以在 localhost:8000(或未来的域 www.randomdomainhere.com)上登录或注册,并在 localhost:8000/login、localhost:8000/registration(www .randomdomainhere.com/registration 等)

【问题讨论】:

  • 最后使用斜线:localhost:8000/registration/。至少这就是你的正则表达式对 URL conf 所说的。有关如何解决它,请参阅 Odif Yltsaeb 的答案。

标签: python django http-status-code-404 django-urls


【解决方案1】:

在每个网址的末尾你应该添加一个 $ 符号,

url(r'^registration/$',views.registration, name='registration'),

参考这个https://docs.djangoproject.com/en/1.4/topics/http/urls/

【讨论】:

    【解决方案2】:

    您在网址末尾缺少 $ 符号。

    应该是:

    url(r'^registration/$',views.registration, name='registration'),
    

    【讨论】:

      【解决方案3】:

      django urls 中的 $ 符号表示end-of-string match character,它是从正则表达式中借来的。因此,$ 应该添加到应用程序 url 的 url 末尾。

      url(r'^registration/$',views.registration, name='registration'),   
      

      但是,我们可以使用没有 $(字符串结尾匹配字符)的正则表达式编写 url,但我们必须包含尾部斜杠(/)。对于没有 $ 的 url,您必须在浏览器中打开 url 时输入尾部斜杠以匹配正则表达式。

      您在项目的 urls.py 中的应用 url 是

      url(r'^grappelli/', include('grappelli.urls')), # grappelli URLS

      所以,要访问注册页面,你需要浏览

      localhost:8000/grappelli/registration/

      即将应用 url 中的路径附加到应用的项目 url 中的路径。

      详细了解网址here.

      【讨论】:

      • 嗯,我以前和现在都试过了,但两次都没有用。也许错误在其他地方......我也会添加我的导入和 404 的屏幕截图,但是因为我可以打开标准索引页面,所以我不知道错误是否在导入中。
      • 好吧 grappelli 实际上不是我的项目^^ 这是 django 的管理主题(顺便说一下,管理主题可以正常工作)。我的问题是,我想在 localhost:8000 上有“Hello world”,在 localhost:8000/registration 上注册。据我了解,(r'^$', include('myapp.urls')), # index with login/registration 是它获取url(r'^registration/$',views.registration, name='registration'), 的地方。
      【解决方案4】:

      您需要从下面给出的第一个网址中删除 $

      urls.py(在我的项目中):

      from django.conf.urls import patterns, include, url
      
      from django.contrib import admin
      
      urlpatterns = patterns('',
        (r'^', include('myapp.urls')), # index with login/registration
        (r'^grappelli/', include('grappelli.urls')),  # grappelli URLS
        (r'^admin/',  include(admin.site.urls)),  # admin site
      )
      

      url 以 ^ 开头,以 $ 结尾。因此,如果遇到 $ ,django 就会知道该 url 已经结束,并且没有更多的内容。因此,在您的情况下,它将不再寻找“注册”。或者如果您的“注册”网址与指定的任何网址都不匹配。

      【讨论】:

        猜你喜欢
        • 2021-05-17
        • 2020-02-22
        • 2020-09-17
        • 1970-01-01
        • 1970-01-01
        • 2011-05-09
        • 2020-04-14
        • 2016-08-01
        • 2016-08-01
        相关资源
        最近更新 更多