2016-09-14 40 views
1

我正在django和我的主頁上創建一個網站我想顯示我最近的博客文章的列表,並在下面幾個街區我想製作一個簡單的聯繫表單。博客和聯繫表格分開工作正常。但我想包括他們在同一頁面(顯然在相同的網址)。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 URL模式是:

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

我想使這兩個內容都顯示在同一頁面中。請幫幫我。如果您需要更多信息,請告訴。

回答

0

對於相同的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,使get_name處理請求的URL模式。

+0

這次聯繫表單出現了,但博客文章沒有出現....我認爲它是因爲在views.py中urls.py中的listview(和stuffs)的等效代碼是不正確的...請幫助 – Ishan

+0

我認爲它應該工作,如果你使用'post_list'而不是'posts'就像我原來那樣。你沒有顯示你的模板,所以我不確定模板變量名是什麼。 – Alasdair

相關問題