Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何从表单字段传递自定义标记参数?_Django_Django Templates - Fatal编程技术网

Django 如何从表单字段传递自定义标记参数?

Django 如何从表单字段传递自定义标记参数?,django,django-templates,Django,Django Templates,我需要做的主要事情是使用特定的自定义python函数扩展ModelDetailView页面。该函数需要从DetailView页面调用并返回一些数据,具体取决于用户在DetailView的自定义表单中输入的参数。当用户输入表单字段值并按“提交”时,由自定义函数响应的数据需要显示在同一个DetailView页面上,没有数据库记录。我想通过位于/app/templatetags/func.py中的自定义标记来实现该函数 在模板中调用它,类似于: <!--templates/detail/arti

我需要做的主要事情是使用特定的自定义python函数扩展ModelDetailView页面。该函数需要从DetailView页面调用并返回一些数据,具体取决于用户在DetailView的自定义表单中输入的参数。当用户输入表单字段值并按“提交”时,由自定义函数响应的数据需要显示在同一个DetailView页面上,没有数据库记录。我想通过位于/app/templatetags/func.py中的自定义标记来实现该函数

在模板中调用它,类似于:

<!--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>
...