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.
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
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