所以! 我成功地让你的代码工作。
我会在三个部分(注意!这将是详尽):举办这个答案
我会复制我做的代码(几乎与你的一样,加上你没有提供的部分,我不得不重新编码 - 这些都是非常基本的,只是为了填补缺少的部分)。我希望它能帮助你找到如何通过比较来解决你的问题。我也会对你的问题提出一个假设。
我将谈谈你的代码。有很好的习惯可以帮助你建立你的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模式)制作第二个应用程序,如果你不想将它插入到“博客”应用程序中。
与您博客/ 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!")
我希望这一切都会有所帮助。
如果您尝试使用/ blog/testspage /而不是/ blog/testspage,会发生什么情况? – vmonteco
错误页面是否显示一些URL模式? – vmonteco
您是否有其他网址错误?你可以添加你的settings.py文件吗? – vmonteco