2015-05-15 58 views
2

我试图从打印的观点的回应..但Django的显示找不到网页的错误(404)Django中找不到的看法......找不到网页的错误

我主要project.urls是: -

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

我已经定义了testview功能在我的views.py

def testview(request): 
    return HttpResponse("testing our view!") 

当我尝试在我的开发服务器上运行的URL 127.0.0.1:8000/blog/testingpage它显示找不到网页错误...有人可以帮我解决这个问题?

+0

如果您尝试使用/ blog/testspage /而不是/ blog/testspage,会发生什么情况? – vmonteco

+0

错误页面是否显示一些URL模式? – vmonteco

+0

您是否有其他网址错误?你可以添加你的settings.py文件吗? – vmonteco

回答

3

这是你的问题:

在你的URL模式,

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"), 

它应该为你工作。

此外,弹头通常与(?P<slug>[\w-]+)匹配,而不是\S+

+0

非常感谢你..我能解决我的问题:) –

+0

太好了。将答案标记为已接受(此答案旁边的绿色勾号)。 – karthikr

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 

其中“主要”是项目的名称和“博客”的应用程序。

从一个全新的项目,这些文件我不得不修改/添加有:

博客/ 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:

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

主/ 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/和其他页面。这样我没有问题。

但我这样做,你会看到这个URL匹配r'^(?P<slug>\S+)$'模式。因此/博客/测试页不会触发视图测试视图但视图细节。 所以我觉得你的问题可能来自于的细节的观点,你能否把它添加到你的问题来检查?

二 - 你怎么能提高代码:

  • 应用程序和意见进口

你进口的方式你的观点是functionnal,但它可能是根本不切实际 您可以添加应用程序( “博客”)在您的main/settings.py中包含您的意见到INSTALLED_APPS。只要输入他们的名字作为字符串,你就可以使用你的观点。

编辑:

This changed with the 1.8 release,现在它推荐给不喜欢你这样做。我的错。

  • 您的项目不是应用程序。

/main/urls.py建议您在/主目录已经一个views.py。 这种方式使用这个目录没有明确禁止,但它是一个应用程序的目的。 /main目录旨在包含常规设置。 我想你应该为你的views.py(也可能是一些url模式)制作第二个应用程序,如果你不想将它插入到“博客”应用程序中。

  • urlpatterns的订购

与您博客/ 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) 

INSTALLED_APP在主/ settings.py(/!\重要/!\)

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!") 

我希望这一切都会有所帮助。

+0

谢谢..我的问题是博客的urls.py中的URL的顺序....现在它解决了:) –