如何将选择从 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')