2016-09-14 3 views
1

Ich mache eine Website in Django und auf meiner Homepage möchte ich die Liste meines letzten Blogposts zeigen und ein paar Blöcke weiter unten möchte ich ein einfaches Kontaktformular erstellen. Der Blog und das Kontaktformular funktionieren separat. Aber ich möchte sie auf der gleichen Seite (offensichtlich in der gleichen URL) einschließen.Django - Mit zwei Ansichten in derselben URL

Die views.py ist:

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}) 

Wenn man sich die forms.py aussehen wollen, dann:

from django import forms 

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

Die URLPATTERN in urls.py meiner Homepage ist:

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

Mit diesem URLPlakat taucht die Liste der Blogposts perfekt auf, aber das Kontaktformular wird nicht angezeigt. Aber mit dem unten stehenden URL-Muster erscheint das Kontaktformular, aber Blogposts werden nicht angezeigt.

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

Ich möchte, dass beide Inhalte auf der gleichen Seite angezeigt werden. Bitte hilf mir. Wenn Sie weitere Informationen benötigen, dann sagen Sie es.

Antwort

0

Es ist nicht möglich, mehrere Ansichten für dieselbe URL zu verwenden. Sie können nur eine Ansicht für jede URL haben.

In diesem Fall besteht die einfachste Lösung darin, Ihre get_name Ansicht zu aktualisieren, sodass sie die Posts im Vorlagenkontext enthält.

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}) 

dann die URL-Muster entfernen, die ListView verwendet, so dass get_name die Anforderungen verarbeitet.

+0

Dieses Mal erschien das Kontaktformular, aber der Blogpost erschien nicht .... Ich denke es ist, weil der entsprechende Code zu listview (und stuffs) in urls.py in views.py ist falsch ... Bitte helfen – Ishan

+0

Ich denke, es sollte funktionieren, wenn Sie 'post_list' anstelle von' posts' verwenden, wie ich es ursprünglich getan hatte. Sie haben Ihre Vorlage nicht angezeigt, daher war ich mir nicht sicher, wie der Name der Vorlagevariable war. – Alasdair