如何在django中使用单个方法在多个页面中显示相同的表单



我有一个带有atrributes的表,我在html视图中将每个属性显示为复选框。我想在不同的页面上显示它们,但我不想为每个类别制作不同的功能。有有效的方法吗?以下是我迄今为止所尝试的。

def questions(request):
# start session page for the user to test
questions = Attribute.objects.all()
realistic = Attribute.objects.filter(holland_code=1)
investigative = Attribute.objects.filter(holland_code=2)
artistic = Attribute.objects.filter(holland_code=3)
social = Attribute.objects.filter(holland_code=4)
enterprising = Attribute.objects.filter(holland_code=5)
conventional = Attribute.objects.filter(holland_code=6)

left = [realistic, investigative, artistic, social, enterprising, conventional]
for attribute in left:
# get all the values form the form submitted
if request.method == "POST":
# THIS WILL GET ALL THE RECOMMENDAITONS
rAttributes = request.POST.getlist('realistic')
print(rAttributes)
return render(request, "main/questions.html", {"questions": attribute})
context = {
"questions": realistic,
}
return render(request, 'main/questions.html', context)

这是我的html模板显示复选框

<form action="" method="POST">
{% csrf_token %}
<div class="form-check">
{% for question in realistic %}
<input type="checkbox" class="form-check-input" id="exampleCheck1" name="realistics" value="{{ question.attribute_name }}">
<label class="form-check-label" for="exampleCheck1">{{ question.attribute_name }}</label>
<br>
{% endfor %}  
</div>
<input type="submit" class="btn btn-danger" value="Next">
</form>

只需将表单添加到基本模板并扩展该模板,即可在任何地方使用。

或者你可以创建一个基于类的视图并添加一个请求后的

class InsterViewNameHere(View):
def post(request, self, id=None, *args, **kwargs):
#form logic and context here 
context = {}
return render(request, 'template.html', context)

为了不必对每个视图或基于类的视图重复相同的post函数,您可以创建一个Mixin视图

class ObjectnameMixin(object):
model = ClassModel
form = formname
def post_form(self):
return form

最新更新