Django不同的URL进入同一页面

时间:2019-11-01 12:58:40

标签: python django

我试图在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")),

我现在正式没主意...任何人都可以发现问题吗?

2 个答案:

答案 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而不是网址