Django 1.10 визуализировать HTML-класс шаблона

После того, как пользователь заполнит форму на моем сайте, я рендерю пользователя (запрос, html, контекст). Я хотел бы вернуть пользователя в ту же часть страницы после регистрации. Я не использую никаких интерфейсных фреймворков (например, angular — это мой следующий проект). Как мне это сделать?

просмотров.py:

def homepage(request):
    countries = Country.objects.count()
    cities = City.objects.count()

    start_trip_date = date(xxxx, x, x)
    today = date.today()
    total_days = today - start_trip_date

    queryset_list = Post.objects.active()[:6]
    query = request.GET.get("q")
    if query:
        queryset_list = queryset_list.filter(
            Q(title__icontains=query) |
            Q(content__icontains=query) |
            Q(user__first_name__icontains=query) |
            Q(user__last_name__icontains=query)
        ).distinct()

    contact_form = EmailUpdatesForm(request.POST or None)
    if contact_form.is_valid():
        contact = contact_form.save(commit=False)
        contact.email = request.POST['email']
        contact.first_name = request.POST['first_name']
        contact.save()
        profile_data = {
            'email': contact.email,
            'first_name': contact.first_name,
        }

        plaintext = get_template('email/frontpage_registered_email/email_text.txt')
        htmly = get_template('email/frontpage_registered_email/email_template.html')
        text_content = plaintext.render(profile_data)
        html_content = htmly.render(profile_data)

        subject = "{0}, thank you for registering with xx!".format(contact.first_name)
        from_email = '[email protected]'
        to_email = contact.email

        msg = EmailMultiAlternatives(subject, text_content, from_email, [to_email])
        msg.attach_alternative(html_content, "text/html")
        msg.send()

        return render(request, "homepage/homepage.html", {})
    else:
        print contact_form.errors,

    context = {
        'object_list': queryset_list,
        'countries': countries,
        'cities': cities,
        'days_traveling': total_days.days,
        'contact_form': contact_form,
    }

    return render(request, "homepage/homepage.html", context)

и составленный html, чтобы показать, что я имею в виду:

<body>
<div class="first">content</div>
<div class="second">
    <form id="contact_form" method="POST" action="." enctype="multipart/form-data" novalidate>
        <fieldset>
            {% csrf_toke %}
            {{ contact_form|crispy }}
            <input class="btn..." type="submit" name="submit" value="Register" />
        </fieldset>
    </form>
</div>
</body>

В приведенном выше я хочу вернуть пользователя в div class="second".

Спасибо.


person Robby    schedule 03.10.2016    source источник


Ответы (1)


Для этого вам нужно различать GET-запрос по умолчанию для доступа к странице и POST-запрос формы.

Например. Вы можете сделать:

contact_form = EmailUpdatesForm() 

if request.method == 'POST':
   contact_form = EmailUpdatesForm(request.POST)
   if contact_form.is_valid():
       contact = contact_form.save(commit=False)
       contact.email = request.POST['email']
       ....
       ....
       form_submit = True

и передать form_submit в контексте.

Затем в HTML:

{% if form_submit %}
   <div class="second"></div>
{% else %}
   <div class="first"></div>
{% endif %}
person zubhav    schedule 03.10.2016
comment
где я могу разместить этот html? Вы перевернули мой html, это что-то, что я поместил внизу? - person Robby; 04.10.2016
comment
Это просто шаблон, которому вам нужно следовать. Когда переменная отправки формы имеет значение true, вы покажете второй div. Если нет, то вы покажете первый div. Вы не должны помещать его внизу, вместо этого вы должны заменить содержимое. Пожалуйста, обратитесь к переменным контекста Django. - person zubhav; 04.10.2016