Django页面中的两个视图

时间:2012-09-11 15:22:18

标签: django django-templates django-views

我在显示页面的输入框时遇到问题。在同一页面上,我想有两个视图,一个访问和检索数据,另一个访问表单。由于它是一个事件注册页面,第一个视图显示特定事件的详细信息,第二个视图是从事件本身中删除特定用户的视图。

我的views.py

def ShowSpecificEvent(request, eventslug):
if request.method == 'POST':
    form = RemovalForm(request.POST)
    if form.is_valid():
        event   = Event.objects.get(slug=eventslug)
        context = {'event': event,}
        updated_event = event.signed_up.remove(for_removal = form.cleaned_data['for_removal'],)
        updated_event.save()
    return render_to_response('base_specific_event.html', context, context_instance=RequestContext(request))
event   = Event.objects.get(slug=eventslug)
context = {'event': event,}
return render_to_response('base_specific_event.html', context, context_instance=RequestContext(request))

def Remove(request, eventslug):
    if request.method == 'POST':
        form = RemovalForm(request.POST)
        if form.is_valid():
            event   = Event.objects.get(slug=eventslug)
            context = {'event': event,}
            updated_event = event.signed_up.remove(for_removal = form.cleaned_data['for_removal'],)
            updated_event.save()
        return render_to_response('base_specific_event.html', context, context_instance=RequestContext(request))
    return HttpResponseRedirect('base_remove_user.html')

我的模板

{% block content %}

event details...

{% if user.is_authenticated %}
{% if event.sign_up_is_live %}
    <p><a href= "{% url eventattend event.slug %}"> Sign me up!</a></p>

<form action='' method='post'>
{% csrf_token %}
{% if form.errors %}<p>Please correct the following fields:</p>{% endif %}
<div class='register_div'>
{% if form.for_removal.errors %} <p class='error'>{{ form.for_removal.errors }}</p>{% endif %}
<p><label for='for_removal'{% if form.for_removal.errors %}class='error'{% endif %}>User to be removed:</label></p>
<p>{{ form.for_removal }}</p>
</div>  

<p><input type='submit'></p>

</form>

{% endif %}{% endif %}

{% endblock %}

我读过this,我认为这是最相关的,但规定的方法并没有真正帮助。

我还想过拆分这两个页面,但是我无法在删除用户页面中检索eventlug。

提前致谢:)

更新

gutrt的回答非常有帮助,我已经设法通过将ShowSpecificEvent更改为以下内容来显示输入框:

def ShowSpecificEvent(request, eventslug):
event   = Event.objects.get(slug=eventslug)
form    = RemovalForm(request.POST or None)
context = {'event': event, 'form': form,}
if request.method == 'POST':
    if form.is_valid():
        updated_event = event.signed_up.remove(request.POST.get('for_removal'))
        updated_event.save()
        return HttpResponseRedirect('base_user_removed.html')
    else:   
        return render_to_response('base_specific_event.html', context, context_instance=RequestContext(request))
return render_to_response('base_specific_event.html', context, context_instance=RequestContext(request))

但是,在提交表单后,我得到一个ValueError(对于带有基数为10的int()的无效文字:'a_technicolor_skye')其中a_technicolor_skye是我正在尝试删除的用户。有没有人有任何想法?顺便说一句,event.signed_up是一个多对多的字段,我把它设置为null = True和blank = True。

1 个答案:

答案 0 :(得分:0)

您可以将所有信息传递到上下文变量中:

context = {'event': event, 'form': my_form}

然后两者都在您的模板中可用。请注意,这意味着您将最终使用1 view ,但计算该视图中页面的所有信息或其方法。