Вставьте контактную форму из приложения в представление класса в Django - PullRequest
3 голосов
/ 23 апреля 2019

Если у вас есть это представление

class Index(TemplateView):
    template_name = 'index.html'

, где index.html имеет такую ​​структуру

{% block content %}
    {% include "content.html" %}
{% content %}

Как включить это представление из приложения контактов в content.html?

def contactForm(request):
    #....some form processing here
return render(request, "contact.html", {'form': form})

Таким образом, внутри content.html у вас есть контактная форма, когда отправка прошла успешно, она просто остается на content.html, говоря об успехе.Благодаря.

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Вы можете использовать FromView, они предназначены для отображения и проверки базовой формы. Вы можете создать некоторую пользовательскую логику для form_valid или форму недействительной. Если поведение по умолчанию в порядке, не используйте их.

Для сообщения об успехе взгляните на https://docs.djangoproject.com/en/2.2/ref/contrib/messages/

from django.urls import reverse_lazy
from django.views.generic import FormView
from django.contrib.messages.views import SuccessMessageMixin

class Index(SuccessMessageMixin,FormView):
    template_name = 'index.html'
    form_class = ContactForm()
    #name of your index view defined in urls.py
    success_url = reverse_lazy('name_of_your_index_view')
    success_message = "Success"


    #OPTIONAL:if you want some custom logic if the form is valid
    def form_valid(self, form):
        #custom logic here
        return super(Index,self).form_valid(form)

    #OPTIONAL:for custom logic if the form is invalid
    def form_invalid(self, form):
        #custom logic here
        return super(Index,self).form_invalid(form)

В html не забудьте поставить что-то вроде:

{% if messages %}
    <ul class="messages">
    {% for message in messages %}
        <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
    </ul>
{% endif %}
0 голосов
/ 23 апреля 2019

Вы должны переопределить get_context_data в index представлении. Как это:

class index(TemplateView):  # please use CamelCase when naming classes
    template_name = 'index.html'

    def get_context_data(self, *args, **kwargs):
       context = super(index, self).get_context_data(*args, **kwargs)
       context['form'] = ContactForm()
       return context
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...