Django将参数传递给视图和模板

时间:2018-10-12 07:41:01

标签: django templates view parameter-passing

我有一个导航树,该导航树告诉我要在我的网站上构建导航树的位置,我始终需要将模板中的所有变量传递为<input type="hidden">。然后,我需要将其从视图传递到下一个模板,并且这种情况一直存在,这似乎是一个糟糕的解决方案,无法将变量从每个模板传递到每个视图。所以我的问题是,如果有更好的解决方案,这里是导航树的屏幕。

模板:

<form action="{% url 'aktentabelle' %}" method="post" style="display:inline-block">
            {% csrf_token %}
        <input type="hidden" name="mitglied" value="{{Container.containernr}}" />
        <input type="hidden" name="contpk" value="{{Container.pk}}" />
        <input type="hidden" name="projectnr" value="{{projectnr}}" />
        <input type="hidden" name="status" value="{{Container.status}}" />
        <input type="hidden" name="chargepk" value="{{chargepk}}" />
        <input type="hidden" name="chargenr" value="{{chargenr}}" />
        <input class="btn btn-primary" type="submit" value="anzeigen" />
        </form>

所以在我的模板中,我总是需要传递很多隐藏的变量,在我看来,我需要将它们转换回以读取它们:

views.py:

def aktentabelle(request):
    assert isinstance(request, HttpRequest) 
    container = request.POST['mitglied']
    z = AkteForm
    projectnr = request.POST['projectnr']
    chargepk = request.POST['chargepk']
    chargenr = request.POST['chargenr']
    contpk = request.POST['contpk']
    closecontainerform = CloseContainerForm
    akte_list = Akte.objects.filter(container__containernr=container)
    Anzahl_Akten =Akte.objects.filter(container__containernr=container).count
    status = request.POST['status']
    return render(
       request,
       'app/aktentabelle.html',
       {
        'title':'About',
        'akte_list':akte_list,
        'anzahl':Anzahl_Akten,
        'container':container,
        'aktenform':z,
        'status':status,
        'closecontainerform': closecontainerform,
        'date':datetime.now().date,
        'contpk':contpk,
        'chargepk':chargepk,
        'chargenr':chargenr,
        'projectnr':projectnr,
       }
       )

如您所见,我使用了很多行,只是将所有变量从一个模板传递到视图,然后再次返回到模板,只是用来构建导航树。

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是使用filters。像下面这样。

from django.template import Library

register = Library()

def get_fields(requested_key):
    my_dict={
        'title':'About',
        'akte_list':akte_list,
        'anzahl':Anzahl_Akten,
        'container':container,
        'aktenform':z,
        'status':status,
        'closecontainerform': closecontainerform,
        'date':datetime.now().date,
        'contpk':contpk,
        'chargepk':chargepk,
        'chargenr':chargenr,
        'projectnr':projectnr,
       }
    return mydict.get("requested_key","")

register.filter('get_fields', get_fields)

使用文件名将其存储在模板标签目录中,并在模板的顶部使用

加载它

{% load filename %}

然后,您可以在模板中执行以下操作。

{% load templatefilename %}
<form action="{% url 'aktentabelle' %}" method="post" style="display:inline-block">
            {% csrf_token %}
        <input type="hidden" name="mitglied" value="{{get_fields|containernr}}"
</form>