Django 如何从表单字段传递自定义标记参数?
我需要做的主要事情是使用特定的自定义python函数扩展ModelDetailView页面。该函数需要从DetailView页面调用并返回一些数据,具体取决于用户在DetailView的自定义表单中输入的参数。当用户输入表单字段值并按“提交”时,由自定义函数响应的数据需要显示在同一个DetailView页面上,没有数据库记录。我想通过位于/app/templatetags/func.py中的自定义标记来实现该函数 在模板中调用它,类似于:Django 如何从表单字段传递自定义标记参数?,django,django-templates,Django,Django Templates,我需要做的主要事情是使用特定的自定义python函数扩展ModelDetailView页面。该函数需要从DetailView页面调用并返回一些数据,具体取决于用户在DetailView的自定义表单中输入的参数。当用户输入表单字段值并按“提交”时,由自定义函数响应的数据需要显示在同一个DetailView页面上,没有数据库记录。我想通过位于/app/templatetags/func.py中的自定义标记来实现该函数 在模板中调用它,类似于: <!--templates/detail/arti
<!--templates/detail/article_detail.html-->
{% load func %}
...
{% get_data article_object.value %}
<form action="" method="get">
{{ form }}
<input type="submit" value="Compare">
</form>
...
forms.py
看起来不可能通过url传递参数,因为。假设我的文章详细信息视图页面有一个url:
; 当我将一些数据放入表单并按submit时,它会变为,但我发现自己在同一页面上,而在URL中,我指出了该记录:
#urls.py
...
path('articles/<int:pk>?diff_ver=<str:diff_ver>', ArticleDetailView.as_view(), name='article_changelog')
在模板中:
<!--templates/detail/article_detail.html-->
{% load func %}
...
{% get_data parameter %}
<form action="" method="get">
{{ form }}
{{ parameter }}
<input type="submit" value="Compare">
</form>
...
使用GET提交表单时,表单参数将附加到URL,如示例所示,diff_ver=4。这些查询组件不是URL的一部分,因此Django URL模式解析不考虑这些组件 但与POST请求类似,您可以通过request.POST获取提交的参数,它们是视图中request.get字典的一部分。因此request.GET.GET'diff\u ver'将返回提交的值,如果未提交任何内容,则返回None
class GetChangelog(forms.Form):
diff_version = forms.CharField(label='difference',max_length=10)
#urls.py
...
path('articles/<int:pk>?diff_ver=<str:diff_ver>', ArticleDetailView.as_view(), name='article_changelog')
class ArticleDetailView(LoginRequiredMixin, UserPassesTestMixin, DetailView):
model = Article
context_object_name = 'article_object'
template_name = 'detail/article_detail.html'
login_url = 'login'
def get_context_data(self, **kwargs):
context['parameter'] = self.request.GET.get('diff_version')
context = super().get_context_data(**kwargs)
context['form'] = GetChangelog()
return context
<!--templates/detail/article_detail.html-->
{% load func %}
...
{% get_data parameter %}
<form action="" method="get">
{{ form }}
{{ parameter }}
<input type="submit" value="Compare">
</form>
...