如何将选择从 Django 模板传递到 Class 视图
How to pass selection from Django template to Class view
我现在正在为一些对我来说应该是例行公事的事情而苦苦挣扎,但我有精神障碍。
我有一个存储国家/地区名称和名称的 slug 版本的模型。
例如。 “美国”、“合众国”
我想在模板中显示国家/地区名称以供选择,然后return 将所选国家/地区的 slug 值添加到 Class 基于视图的视图中,该视图随后将获取数据。国家列表可以是链接或下拉列表 - 随便什么。但是我需要在视图中获取选定的值。这是一个简化版本:
模板
{% extends 'base.html' %}
{% block content %}
<form method="POST">
{% for country in object_list %}
<a href="{{country.slug_name}}">{{ country.pretty_name }}</a></br>
{% endfor %}
</form>
{% endblock content %}
查看
class CountryView(TemplateView):
country_name = THE SLUG
country_obj = Country(country_name)
country_obj.build_country_dictionary()
country_obj.display()
所以我想我需要一种获取方法来访问它,但我无法解决。感谢您的帮助。
“结构化方式”
看看FormView
,在那里你定义了你的表单class(你也需要创建,取决于你的情况,也可以是模型表单)。剩下的大部分由视图处理。
https://ccbv.co.uk/projects/Django/4.0/django.views.generic.edit/FormView/
伪代码
class MyForm(ModelForm):
model = YourModel
class MyFormView(FormView):
form_class = MyForm
# depends on what you want to do, you can overwrite form_valid to do your logic
最快的方法
伪代码
{% extends 'base.html' %}
{% block content %}
<form method="POST">
{% csrf_token %}
<select name="selection">
{% for country in object_list %}
<option value="{{ country.slug_name }}">{{ country.pretty_name }}</option>
{% endfor %}
</select>
<input type="submit">Submit</input>
</form>
{% endblock content %}
class CountryView(TemplateView):
def post(self, request, *args, **kwargs):
selection = request.POST.get('selection')
我现在正在为一些对我来说应该是例行公事的事情而苦苦挣扎,但我有精神障碍。 我有一个存储国家/地区名称和名称的 slug 版本的模型。
例如。 “美国”、“合众国”
我想在模板中显示国家/地区名称以供选择,然后return 将所选国家/地区的 slug 值添加到 Class 基于视图的视图中,该视图随后将获取数据。国家列表可以是链接或下拉列表 - 随便什么。但是我需要在视图中获取选定的值。这是一个简化版本:
模板
{% extends 'base.html' %}
{% block content %}
<form method="POST">
{% for country in object_list %}
<a href="{{country.slug_name}}">{{ country.pretty_name }}</a></br>
{% endfor %}
</form>
{% endblock content %}
查看
class CountryView(TemplateView):
country_name = THE SLUG
country_obj = Country(country_name)
country_obj.build_country_dictionary()
country_obj.display()
所以我想我需要一种获取方法来访问它,但我无法解决。感谢您的帮助。
“结构化方式”
看看FormView
,在那里你定义了你的表单class(你也需要创建,取决于你的情况,也可以是模型表单)。剩下的大部分由视图处理。
https://ccbv.co.uk/projects/Django/4.0/django.views.generic.edit/FormView/
伪代码
class MyForm(ModelForm):
model = YourModel
class MyFormView(FormView):
form_class = MyForm
# depends on what you want to do, you can overwrite form_valid to do your logic
最快的方法
伪代码
{% extends 'base.html' %}
{% block content %}
<form method="POST">
{% csrf_token %}
<select name="selection">
{% for country in object_list %}
<option value="{{ country.slug_name }}">{{ country.pretty_name }}</option>
{% endfor %}
</select>
<input type="submit">Submit</input>
</form>
{% endblock content %}
class CountryView(TemplateView):
def post(self, request, *args, **kwargs):
selection = request.POST.get('selection')