【问题标题】:404 on django app when address doesn't have extension (in mezzanine)django 应用程序上的 404 地址没有扩展名(在夹层中)
【发布时间】:2014-03-11 16:35:22
【问题描述】:

当我转到http://localhost:8000/getAndAnalyzePosts/index 时,它会显示 404s 并添加一个斜杠(无论我是 APPEND_SLASH = True 还是 APPEND_SLASH = False,它都会这样做

转到http://localhost:8000/getAndAnalyzePosts/test 不起作用,但http://localhost:8000/getAndAnalyzePosts/test.anything 可以。

我真的很想使用'^$' 作为索引,但这也不起作用。

我在一个夹层项目中有这个应用程序,我还没有尝试将它放入一个常规的 django 项目 - 可能接下来应该这样做。我的项目的其余部分工作正常(使用夹层的默认应用程序)

getAndAnalyzePosts/urls.py

from django.conf.urls import patterns, url

from getAndAnalyzePosts import views

urlpatterns = patterns('',
    url(r'^index$', views.index, name='index'),
    url(r'^test.+$', views.test, name='test'),
    url(r'^getSentiment$', views.getSentiment, name='getSentiment'),
)

注意:getSentiment 需要发布变量,所以我并没有真正直接测试它

urls.py(主项目)

from __future__ import unicode_literals

from django.conf.urls import patterns, include, url
from django.conf.urls.i18n import i18n_patterns
from django.contrib import admin
from mezzanine.core.views import direct_to_template
admin.autodiscover()
urlpatterns = i18n_patterns("",
    ("^admin/", include(admin.site.urls)),
)
urlpatterns += patterns('',
    url(r"^$", direct_to_template, {"template": "index.html"}, name="home"),
    (r"^", include("mezzanine.urls")),
    url(r'^getAndAnalyzePosts/', include('getAndAnalyzePosts.urls', namespace="getAndAnalyzePosts")),
)
handler404 = "mezzanine.core.views.page_not_found"
handler500 = "mezzanine.core.views.server_error"

另外,我从 django-extensions 运行 python manage.py show_urls 并返回:

/getAndAnalyzePosts/getSentiment        getAndAnalyzePosts.views.getSentiment   getSentiment
/getAndAnalyzePosts/index      getAndAnalyzePosts.views.index  index
/getAndAnalyzePosts/test.+      getAndAnalyzePosts.views.test   test

【问题讨论】:

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


    【解决方案1】:

    您在某个阶段在此处粘贴的项目 urls.py 有一些用大写的大写字母描述您所面临的确切问题的 cmets,这是它​​们的原始来源:

    https://github.com/stephenmcd/mezzanine/blob/master/mezzanine/project_template/urls.py#L63-L66

    【讨论】:

    • 那是一个讨厌 :( 谢谢
    【解决方案2】:

    附加斜杠选项确保如果传入的 url 没有尾部斜杠并且没有 url 匹配,那么它在添加尾部斜杠后退出。 它不做的是从传入的 url 中删除尾部斜杠后重试。 由于传入的 url 确实有一个斜杠,你需要一个 / 在 $ 之前 在所有网址的 $ 之前添加 / 最后 (r'^getSentiment/$) 让附加斜线为真,它应该可以工作。

    .+ 有效,因为 .在正则表达式中匹配除换行符以外的任何内容,并且您在它之后添加了 + ,因此它可以多次匹配任何字符,以匹配 .正是你需要逃避它(。) 让它^text\..+$

    【讨论】:

    • 我在我的设置中尝试了^index/$ 和APPEND_SLASH = True,当我转到http://localhost:8000/getAndAnalyzePosts/index/ 时这个404'd
    • 你的 debug=True 吗?你能给出django在你的浏览器上返回的响应吗?
    • 它没有提供任何详细信息,仅显示 404、请求方法 GET 和请求 URL 以及“您看到此错误,因为您的 Django 设置文件中有 DEBUG = True。将其更改为 False , Django 将显示一个标准的 404 页面。”
    • Nope 不能在相同的配置中重现它。自更改以来,您的 show_urls 输出是否发生了变化?
    • 它添加了 //getAndAnalyzePosts/getSentiment getAndAnalyzePosts.views.getSentiment getSentiment /getAndAnalyzePosts/index/ getAndAnalyzePosts.views.index index /getAndAnalyzePosts/test.+ getAndAnalyzePosts.views.test 测试
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 2020-11-16
    相关资源
    最近更新 更多