Python 有没有一种优雅的方法可以将{%if..%}应用于Django中的所有标记?
我正在使用django创建一个XML文档,查看XSD模式,可能需要也可能不需要很多标记 像这样:Python 有没有一种优雅的方法可以将{%if..%}应用于Django中的所有标记?,python,xml,django,django-templates,Python,Xml,Django,Django Templates,我正在使用django创建一个XML文档,查看XSD模式,可能需要也可能不需要很多标记 像这样: <GenericCustomerPaymentDetails> <PayPalID>{{purchase.customer.ppid}}</PayPalID> <BankAccountNumber>{{purchase.customer.ban}}</BankAccountNumber> <SortCode&g
<GenericCustomerPaymentDetails>
<PayPalID>{{purchase.customer.ppid}}</PayPalID>
<BankAccountNumber>{{purchase.customer.ban}}</BankAccountNumber>
<SortCode>{{purchase.customer.sc}}</SortCode>
<CreditCardNumber>{{purchase.customer.ccn}}</CreditCardNumber>
<BitCoinAddress>{{purchase.customer.bitcoin}}</BitCoinAddress>
</GenericCustomerPaymentDetails>
如果有更优雅的方法可以做到这一点?是否有方法对值和标记大容量应用if exists?(如果解决方案能够容纳STAG[自动关闭标签],则可获得额外积分)
我能想到的唯一方法是将这些支付方法放入json上的对象列表中,如下所示
purchase.customer:[
{tag_name:"PayPalID",tag_content:"pay.me.monies@geemail.com"},
{tag_name:"BitCointAddress",tag_content:"http://blockexplorer.com/address/1PC9aZC4hNX2rmmrt7uHTfYAS3hRbph4UN"},
]
然后绕着它们转一圈。但这需要额外的数据操作才能转换成这种格式,我不希望这样做(如果看起来是可行的,但如果您已经有这样的数据)。您可以编写一个自定义过滤器,检查值是否存在,并使用正确的XML标记对其进行包装。例如:
def default_xml_tag(value, arg):
if value:
return "<{0}>{1}</{0}>".format(arg, value)
else:
return ""
在模板中
有关如何注册过滤器的详细信息,请参阅(非常好)。这或多或少就是我刚刚写的内容!谢谢你指出这是多么简单。唯一不同的是我用的是。
def default_xml_tag(value, arg):
if value:
return "<{0}>{1}</{0}>".format(arg, value)
else:
return ""
{{purchase.customer.ppid | default_xml_tag:"PayPalID" }}