将变量传递给下一个模板

时间:2017-07-18 06:24:08

标签: python django

我想通过一个模板将一个变量传递给另一个模板。 第一个模板我识别变量并转到第二个。从第二个开始,我想将此变量传递给第三个模板。

valoare-list.html

{% for valoare in valoares %}
     <a href="{% url 'valoare_detail' pk=valoare.pk %}">
          Contracte de valoare {{ valoare.tip_valoare }}
     </a>
{% endfor %}

valoare-detail.html

<!-- This variable to be sent to the next template -->
Valoare: {{ valoare.tip_valoare }} <br>

{% for tip in tips %}
      <a href="{% url 'contract_list' valoare=valoare.tip_valoare pk=tip.pk %}">
           Tip Contracte de {{ tip.tip_contract }}
      </a>
{% endfor %}

合同-list.html

Valoare: {{ valoare.tip_valoare }} <br>
Tip Contract: {{ tip.tip_contract }}

models.py

from django.db import models


class Valoare(models.Model):
    VALOARE_CHOICES = (
           ("MICA","mica"),
           ("MARE","mare"),
    )
    tip_valoare = models.CharField(max_length=4, choices=VALOARE_CHOICES, default="MICI")
    file_name = models.FileField(null=True, blank=True)

    def __str__(self):
        return self.tip_valoare


class Tip(models.Model):
    TIP_CHOICES = (
           ("BUNURI","bunuri"),
           ("SERVICII","servicii"),
           ("LUCRARI","lucrari"),
    )
    tip_contract = models.CharField(max_length=8, choices=TIP_CHOICES, default="BUNURI")
    file_name = models.FileField(null=True, blank=True)

    def __str__(self):
        return self.tip_contract

views.py

from django.shortcuts import render, get_object_or_404
from .models import Valoare, Tip


def valoare_list(request):
    valoares = Valoare.objects.all
    return render(request, 'contracte/valoare_list.html', {'valoares': valoares})

def valoare_detail(request, pk):
    valoare = get_object_or_404(Valoare, pk=pk)
    tips = Tip.objects.all
    return render(request, 'contracte/valoare_detail.html', {'valoare': valoare, 'tips': tips})

def contract_list(request, valoare, pk):
    (?????)
    tip = get_object_or_404(Tip, pk=pk)
    return render(request, 'contracte/contract_list.html', {'valoare': valoare, 'tip': tip})

urls.py

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.valoare_list, name='valoare_list'),
    url(r'^valoare/(?P<pk>\d+)/$', views.valoare_detail, name='valoare_detail'),
    url(r'^contract/(?P<valoare>[a-z]{4})/(?P<pk>\d+)/$', views.contract_list, name='contract_list'),
]

1 个答案:

答案 0 :(得分:0)

由于您通过此tip_valoare传递<a href="{% url 'contract_list' valoare=valoare.tip_valoare pk=tip.pk %}">,因此网址valoare内的url(r'^contract/(?P<valoare>[a-z]{4})/(?P<pk>\d+)/$', ...)值将为tip_valoare( 4个小写字母)。

然后,你可以得到这样的valoare对象(在contract_list视图内):

def contract_list(request, valoare, pk):
    # (?????) - valoare is actually the tip_valoare
    valoare = get_object_or_404(Valoare, tip_valoare=valoare)
    tip = get_object_or_404(Tip, pk=pk)
    return render(request, 'contracte/contract_list.html', {'valoare': valoare, 'tip': tip})