2016-10-03 6 views
0

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

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

Выше я хочу вернуть пользователь к классу сНа = «второй» ,

Спасибо.

ответ

0

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

E.g. Вы можете:

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 %} 
+0

где я помещаю этот HTML? Вы отменили мой html, это что-то, что я поставил на дно? – Robby

+0

Его просто шаблон, который вам нужно следовать .. когда переменная form submit верна, вы увидите второй div .. если нет, то вы увидите первый div. Вы не должны ставить его внизу, вместо этого вы должны заменить содержимое. См. Контекстные переменные Django – zubhav