首页 文章

Django - 在同一个网址中有两个视图

提问于
浏览
1

我正在django制作一个网站,在我的主页上,我想显示我最近的博客文章列表,下面几个街区我想制作一个简单的联系表格 . 博客和联系表单独工作正常 . 但我希望将它们包含在同一页面中(显然在同一个网址中) .

views.py是:

from .forms import NameForm

def get_name(request):
    if request.method == 'POST':
        form = NameForm(request.POST)
        if form.is_valid():
            return HttpResponseRedirect('/thanks/')
    else:
        form = NameForm()
    return render(request, 'personal/index.html', {'form': form})

如果你想查看forms.py,那么:

from django import forms

class NameForm(forms.Form):
    your_name = forms.CharField(label='Your name', max_length=100)

我主页的urls.py中的urlpattern是:

urlpatterns = [
    url(r'^$', ListView.as_view(
                                queryset=Post.objects.all().order_by("-date")[:2],
                                template_name="personal/index.html")),
    url(r'^$', views.get_name, name='contact'),
]

使用此urlpatter,博客文章列表完美显示但联系表单未显示 . 但是下面的urlpattern联系表单显示但博客帖子没有显示 .

urlpatterns = [
    url(r'^$', views.get_name, name='contact'),
    url(r'^$', ListView.as_view(
                                queryset=Post.objects.all().order_by("-date")[:2],
                                template_name="personal/index.html")),
]

我想让这两个内容显示在同一页面中 . 请帮我 . 如果您需要更多信息,请告诉我们 .

1 回答

  • 0

    对于同一URL,不可能有多个视图 . 每个URL只能有一个视图 .

    在这种情况下,最简单的解决方法是更新 get_name 视图,使其包含模板上下文中的帖子 .

    def get_name(request):
        if request.method == 'POST':
            form = NameForm(request.POST)
            if form.is_valid():
                return HttpResponseRedirect('/thanks/')
        else:
            form = NameForm()
        post_list = Post.objects.all().order_by("-date")[:2]
        return render(request, 'personal/index.html', {'form': form, 'post_list': post_list})
    

    然后删除使用 ListView 的url模式,以便 get_name 处理请求 .

相关问题