Django转换和多视图

时间:2015-10-06 19:29:35

标签: django forms

我有表格

amount = forms.IntegerField(label='Amount :',help_text='enter price')

和模板html

{% if contact_data.amount %}
<h4> Amount :  {{ contact_data.amount }}</h4>

我想打印模板html'amount'和'amount'* 1,75和'amount'/0.45?如何最好的解决方案

2 个答案:

答案 0 :(得分:2)

我不确定我是否理解这个问题......但如果你想要做的是显示amountamount * 1.75mount / 0.45(不确定你是否想要倍增)再来一次)。然后....有很多方法可以做到这一点。

  1. 有些人会争辩说你应该在视图中计算所有这些值,然后在模板中展示它们。有关如何将数据从视图传递到模板的示例如下:

    from django.shortcuts import render_to_response
    
    def my_view(request):
        # Assuming a function get_contact_data() because I don't know where you are
        # getting this.
        contact_data = get_contact_data()
        return render_to_response(
            'polls/detail.html',
            {
                'amount_one': contact_data.amount,
                'amount_two': contact_data.amount * 1.75,
                'amount_three': contact_data.amount / 0.45,
            }
        )
    
    # And then in the template...
        <h4> Amount One: {{ amount_one }}</h4>
        <h4> Amount Two: {{ amount_two }}</h4>
        <h4> Amount Three: {{ amount_three }}</h4>
    
  2. 简单的方法是在模板中处理这个问题。在这种情况下,我建议使用django-mathfilters。这将允许您在模板中执行以下操作:

    <h4> Amount :  {{ contact_data.amount }}</h4>
    <h4> Amount :  {{ contact_data.amount|mul:1.75 }}</h4>
    <h4> Amount :  {{ contact_data.amount|div:0.45 }}</h4>
    
  3. 如果contact_data是某种数据模型,您可以在模型级别处理它:

    from django.db import models
    
    class ContactData(models.Model):
        amount = models.IntegerField()
    
        @property
        def amount_two(self):
            return self.amount * 1.75
    
        @property
        def amount_three(self):
            return self.amount / 0.45
    
    # And then in the template...
        <h4> Amount One:  {{ contact_data.amount }}</h4>
        <h4> Amount Two:  {{ contact_data.amount_two }}</h4>
        <h4> Amount Three:  {{ contact_data.amount_three }}</h4>
    

答案 1 :(得分:0)

如果您想在视图中执行此操作并使用Class-Based Views,请使用ContextMixin将预先计算的值添加到传递给模板的上下文中。

views.py

from django.views.generic import DetailView

from .models import YourModel


class YourModelDetailView(DetailView):
    model = YourModel

    def get_context_data(self, **kwargs):
        context = super(YourModelDetailView, self).get_context_data(**kwargs)
        context['amount_mult'] = self.contact_data.amount * 1.75
        context['amount_div'] = self.contact_data.amount / 0.45
        return context

然后在您的模板中,您使用的内容如下:{{ amount_mult }}{{ amount_div }}