我正在尝试从视图中打印响应..但是django显示页面未找到错误(404)
我的主要项目是: -
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')),
)
我的博客的urls.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时,它显示找不到页面错误...有人可以帮我解决这个问题吗?
答案 0 :(得分:4)
以下是您的问题:
在您的网址格式中
url(r'^(?P<slug>\S+)$', views.detail, name="entry_detail"),
url(r'^testingpage/', views.testview, name='testview'),
在testingpage
之前?P<slug>\S+
与views.detail
(views.testview
)匹配,您可能有raise 404
或类似的代码行匹配slu ..
所以,改变顺序:
url(r'^testingpage/', views.testview, name='testview'),
url(r'^(?P<slug>\S+)$', views.detail, name="entry_detail"),
它应该适合你。
此外,Slug通常与(?P<slug>[\w-]+)
匹配,而不是\S+
答案 1 :(得分:0)
原来如此! 我成功地使你的代码工作。
我将在三个部分中组织这个答案(注意:这将是详尽无遗的!):
我将复制我制作的代码(几乎和你的代码一样,加上你没有提供的部分,我不得不重新编码 - 这些是非常基本的,只是为了填补缺失的部分)。我希望它能帮助您找到如何通过比较来解决您的问题。我还会假设你的问题。
我会谈谈你的代码。有良好的习惯可以帮助你建立你的django项目(但你似乎没有使用这些)。请注意,您的代码无需使用即可运行。但没有这些习惯可能会更加困难。
我会建议您修改一段代码,并附上注释以说明第二部分。
我使用 django 1.7.5 制作我自己的项目版本。 我像这样组织了这个项目:
.
├── blog
│ ├── __init__.py
│ ├── admin.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── main
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── views.py
│ └── wsgi.py
└── manage.py
“ main ”是项目名称,“ blog ”是应用程序。
从一个新项目中,我必须修改/添加的文件是:
blog / urls.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'),
)
blog / views.py:
from django.shortcuts import render, HttpResponse
# Create your views here.
def testview(request):
return HttpResponse("testing our view!")
def index(request):
return HttpResponse("Index.")
def detail(request, slug="test"):
return HttpResponse("Detail : " + slug)
main / urls.py:
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'^$', 'main.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')),
)
main / views.py:
from django.shortcuts import render, HttpResponse
# Create your views here.
def siteindex(request):
return HttpResponse("site index!")
然后我就这样做了:
>>>python manage.py migrate
>>>python manage.py runserver
我可以访问http://127.0.0.1:8000/blog/testingpage/和其他页面。我没有这个问题。
但是,如果我这样做,您会看到此网址与r'^(?P<slug>\S+)$'
模式匹配。因此 / blog / testingpage 不会触发视图 testview ,而是触发视图详细信息。
所以我认为您的问题可能来自详细信息视图,您可以将其添加到您的问题中进行检查吗?
导入视图的方式是功能性的,但它可能是不可原谅的
您可以将包含视图的应用(“博客”)添加到 main / settings.py 中的INSTALLED_APPS
。只需将其名称输入字符串,您就可以使用您的观点。
编辑:
This changed with the 1.8 release,现在建议像你一样做。我的坏。
您的 /main/urls.py 表明您在 / main 目录中有一个views.py. 使用此目录不是明确禁止的,但它是应用程序的目的。 / main 目录包含常规设置。 我认为如果你不想在“ blog ”应用中插入它,你应该为 views.py (可能还有一些网址模式)制作第二个应用。
使用 blog / urls.py 文件,您的应用将“正常运行”。但是 / blog / testingpage / 会触发详细信息视图而不是 testview 视图,我不确定这是你想要做什么。小心模式顺序!
这是我的代码版本。 我组织了这样的项目:
.
├── blog
│ ├── __init__.py
│ ├── admin.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── main
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
└── website
├── __init__.py
├── admin.py
├── models.py
├── tests.py
├── urls.py
└── views.py
新文件是:
<强>博客/ urls.py 强>
from django.conf.urls import patterns, url
# You don't need this anymore
# from blog import views
urlpatterns = patterns('blog.views', # this first argument will be used as a prefix to locate your views.
url(r'^$', 'index' , name="index"),
# beware the order!
# url(r'^(?P<slug>\S+)$', views.detail, name="entry_detail"),
url(r'^testingpage/', 'testview', name='testview'),
url(r'^(?P<slug>\S+)$', 'detail', name="entry_detail"),
)
<强>博客/ views.py 强>
from django.shortcuts import render, HttpResponse
# Create your views here.
def testview(request):
return HttpResponse("testing our view!")
def index(request):
return HttpResponse("Index.")
def detail(request, slug="test"):
return HttpResponse("Detail : " + slug)
主页/ settings.py中的INSTALLED_APP(/!\ Important /!\)
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
'website',
)
主要/ urls.py 强>
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'main.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^blog/', include('blog.urls')),
url(r'^markdown/', include('django_markdown.urls')),
url(r'^$', include('website.urls')),
)
网站/ urls.py 强>
from django.conf.urls import patterns, include, url
from django.contrib import admin
from django.conf import settings
# If you add the app name to INSTALLED_APP you don't need this anymore.
# from . import views
urlpatterns = patterns('website.views', # This first argument will be used as a prefix to locate your views.
url(r'^$', 'siteindex', name="siteindex"),
)
网站/ views.py 强>
from django.shortcuts import render, HttpResponse
# Create your views here.
def siteindex(request):
return HttpResponse("site index!")
我希望所有这一切都会有所帮助。