Django перенаправляет другое представление из другой формы приложения
contact/views.py
from django.core.mail import send_mail, BadHeaderError
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render, redirect
from .forms import ContactForm
def contactView(request):
if request.method == 'GET':
form = ContactForm()
else:
form = ContactForm(request.POST)
if form.is_valid():
subject = form.cleaned_data['subject']
from_email = form.cleaned_data['from_email']
message = form.cleaned_data['message']
try:
send_mail(subject, message, from_email, ['admin@example.com'])
except BadHeaderError:
return HttpResponse('Invalid header found.')
# return redirect('success')
return redirect('PostList') #another view from another app
return render(request, "contact.html", {'form': form})
# def successView(request):
# return HttpResponse('Success! Thank you for your message.')
contact/urls.py
from django.contrib import admin
from django.urls import path
from .views import contactView
urlpatterns = [
path('contact/', contactView, name='contact'),
# path('success/', successView, name='success'),
]
blog/views.py
from django.views import generic
from .models import Post, PostImage
# Create your views here.
class PostList(generic.ListView):
queryset = Post.objects.filter(status=1).order_by('-created_on')
template_name = 'index.html'
class PostDetail(generic.DetailView):
model = Post
template_name = 'post_detail.html'
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
context = super().get_context_data(**kwargs)
# Add in a QuerySet of all the books
# context['image_list'] = PostImage.objects.all()
# context['image_list'] = self.get_object().postimage_set.all()
context['image_list'] = PostImage.objects.filter(post__slug=self.kwargs.get('slug'))
return context
blog/urls.py
from . import views
from django.urls import path
urlpatterns = [
path('', views.PostList.as_view(), name='home'),
path('<slug:slug>/', views.PostDetail.as_view(), name='post_detail'),
]
Мне нужно следующее в самой простой DRY манере; как мне написать этот редирект внутри contact/views.py
?
return redirect('PostList') #another view from another app
PostList
- это представление на основе класса из другого приложения под названием blog. По сути, это домашняя страница.
для справки... https://ordinarycoders.com/blog/article/django-messages-framework
В папке вашего проекта (например, my_project/my_project) у вас должен быть urls.py с чем-то вроде этого
path("admin/", admin.site.urls),
path("", include("blog.urls")),
path("", include("contact.urls"))
Это позволяет django просматривать все файлы url в указанном порядке. Пока все ваши имена url и шаблоны уникальны, ваше представление должно быть способно просто делать
from django.shortcuts import redirect
from django.urls import reverse
return redirect(reverse('home'))
'home' - значение имени ListView.
(NB: если у вас есть различные файлы applevel urls.py с path(''
... django возьмет первый попавшийся)