我试图在Django网站上创建2个额外的页面,我没有问题地创建了第一个页面(calendar.html),但是当我尝试创建第二个页面(actionplan.html)时却没有错误,但是当我访问xxx / actionplan.html时,它显示了calendar.html页面...我无法访问xxx / actionplan.html
这是我的urls.py:
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls import url
from django.conf.urls.static import static
from django.views.generic import TemplateView
from django.views.generic.detail import DetailView
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
url(r'xxx', TemplateView.as_view(template_name="calendar.html")),
url(r'^xxx/$', DetailView.as_view(template_name="actionplan.html")),
url(r'^admin/', admin.site.urls),
url(r'^', include('blog.urls'), name="Blog"),
] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
这是我的views.py:
from django.views import generic
from .models import Post
class PostList(generic.ListView):
queryset = Post.objects.filter(status=1).order_by('-created_on')
template_name = 'index.html'
class PostDetail(generic.DetailView):
model = Post
template_name = 'post_detail.html'
class Calendar(generic.DetailView):
model = Post
template_name = 'calendar.html'
class Planoacao(generic.DetailView):
model = Post
template_name = 'actionplan.html'
我尝试过:
url(r'^xxx/$', DetailView.as_view(template_name="actionplan.html")),
url(r'^xxx', DetailView.as_view(template_name="actionplan.html")),
url(r'^xxx$', DetailView.as_view(template_name="actionplan.html")),
url(r'xxx', DetailView.as_view(template_name="actionplan.html")),
我现在正式没主意...任何人都可以发现问题吗?
答案 0 :(得分:2)
您实际上给了它们相同的URL,yoursite.com/xxx
,可以重新排列它们,并先用斜杠将其放置,然后可能起作用,但随后将成为噩梦如果您使用django的APPEND_SLASH
设置。
要修复,请使您的网址唯一
actionplan.html
与您的网址无关,它的“有效”只是因为日历的正则表达式只是在给定的网址中寻找xxx
。
答案 1 :(得分:2)
问题是,在您的urlpatterns
中,您两次输入了相同的网址:
url(r'xxx', TemplateView.as_view(template_name="calendar.html")),
url(r'^xxx/$', DetailView.as_view(template_name="actionplan.html")),
您应该为两个视图添加不同的网址,
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
url(r'^xxx/plan$', DetailView.as_view(template_name="actionplan.html")),
url(r'xxx', TemplateView.as_view(template_name="calendar.html")),
url(r'^admin/', admin.site.urls),
url(r'^', include('blog.urls'), name="Blog"),
] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
,并且您应该使用path
而不是网址