2016-09-14 51 views
1

私はDjangoのウェブサイトを作っています。私のホームページに私の最近のブログ投稿のリストを表示したいと思います。ブログと連絡フォームは別々にうまくいきます。しかし、私は同じページに(明らかに同じURLに)それらを含めるしたいと思います。Django - 同じURLに2つのビューを持っています

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

この両方のコンテンツを同じページに表示する必要があります。私を助けてください。それ以上の情報が必要な場合は教えてください。

答えて

0

同じURLに対して複数のビューを表示することはできません。 URLごとに1つのビューしか作成できません。

この場合、最も簡単な修正は、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}) 

その後get_nameが要求を処理するようListViewを使用するURLパターンを削除します。

+0

今回は連絡フォームが登場しましたが、ブログ投稿は表示されませんでした....私は、それがviews.pyのurls.pyのlistview(とstuffs)に相当するコードが間違っていると思います...助けてください – Ishan

+0

私が元々持っていた 'posts'の代わりに' post_list'を使うとうまくいくと思います。あなたはテンプレートを表示していないので、テンプレートの変数名がわからない。 – Alasdair

関連する問題