我正试图从视图中打印一个响应。。但django显示页面未找到错误(404)
我的主项目.url是:
from django.conf.urls import patterns, include, url
from django.contrib import admin
from django.conf import settings
from . import views
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'ultimatefinalblog.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^$',views.siteindex,name="siteindex"),
url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^markdown/', include('django_markdown.urls')),
)
我博客的url.py是:
from django.conf.urls import patterns, url
from blog import views
urlpatterns = patterns('',
#url(r'^$', views.BlogIndex.as_view(), name="index"),
#url(r'^(?P<slug>\S+)$', views.BlogDetail.as_view(), name="entry_detail"),
#url(r'^$', views.testview, name="testview"),
url(r'^$', views.index, name="index"),
url(r'^(?P<slug>\S+)$', views.detail, name="entry_detail"),
url(r'^testingpage/', views.testview, name='testview'),
)
我在views.py中定义了testview函数
def testview(request):
return HttpResponse("testing our view!")
当我尝试在我的开发服务器中运行url 127.0.0.1:8000/blog/testingpage时,它会显示页面未找到错误…有人能帮助我解决这个问题吗?
这是你的问题:
在你的URL模式中
在
views.testview
之前,testingpage
与?P<slug>\S+
(用于views.detail
)匹配,您可能有一个raise 404
或类似的代码行来匹配slug。所以,改变顺序:
它应该对你有用。
此外,Slug通常与
(?P<slug>[\w-]+)
匹配,而不是\S+
所以! 我成功地使你的代码工作。
我将把这个答案分成三部分(注意:它将是详尽无遗的!)以下内容:
我会复制我做的代码(几乎和你的一样,加上你没有提供的部分,我不得不重新编码-这些是非常基本的,只是为了填补缺失的部分)。我希望它能帮助你通过比较找到解决问题的方法。我也会对你的问题提出一个假设。
我来谈谈你的代码。有一些好习惯可以帮助你建立你的django项目(但你似乎没有使用这些)。请注意,您的代码可以不使用这些。但是没有这些习惯可能会更困难。
我将建议您使用带有注释的代码的正确版本来说明第二部分。
首先-在我的计算机上工作的代码:
我用django 1.7.5制作了自己的项目版本。 我是这样组织这个项目的:
其中“main”是项目名称,而“blog”是一个应用程序。
在一个新项目中,我必须修改/添加的文件有:
博客/url.py:
博客/浏览量.py:
main/url.py:
主视图/views.py:
然后我就做了:
我可以访问http://127.0.0.1:8000/blog/testingpage/和其他页面。这样我没问题。
但如果这样做,您将看到这个URL与
r'^(?P<slug>\S+)$'
模式匹配。因此/blog/testingpage不会触发视图testview而是触发视图detail。 所以我认为您的问题可能来自于detail视图,您可以将它添加到您的问题中进行检查吗?第二-如何改进代码:
导入视图的方式是功能性的,但可能不太可行 您可以在main/settings.py中添加包含您的视图的应用程序(“blog”)。您只需输入视图的名称作为字符串就可以使用它们。
编辑:
This changed with the 1.8 release,现在建议你像以前那样做。我的错。
您的/main/urls.py表明您的/main目录中有一个views.py。 这样使用这个目录并没有被明确禁止,但这是应用程序的目的。/main目录包含常规设置。 如果你不想在“blog”应用程序中插入它,我认为你应该为你的views.py(可能还有一些url模式)制作第二个应用程序。
使用blog/urls.py文件,您的应用程序将“正常工作”。但是/blog/testingpage/将触发细节视图,而不是测试视图视图,我不确定这是您想要做的。注意图案顺序!
第三-另一种方法:
这是我的代码版本。 我组织了这样的项目:
新文件是:
博客/url.py
博客/视图.py
在main/settings.py中安装了_应用程序(/!\重要/!\)
main/url.py
网站/url.py
网站/视图.py
我希望所有这些都会有帮助。
相关问题 更多 >
编程相关推荐