django - 将参数从模板传递到 models.py 的函数
Posted
技术标签:
【中文标题】django - 将参数从模板传递到 models.py 的函数【英文标题】:django - pass parameter from template to models.py' s function 【发布时间】:2013-04-05 14:10:52 【问题描述】:我有一个名为 mymodel 的模型,它有一个属性 getp,但这需要一个参数(请求):
class Mymodel(models.Model):
...
def getp(self, request):
return "STH"
。从视图中,我将请求和一个模型传递给模板:
return render_to_response('x.html',
'mymodel': Mymodel.objects.get(id=17),
'request': request
, context_instance = RequestContext(request))
,从模板文件中,有没有办法用请求参数调用getp函数?我知道不应该这样使用它,但我的问题是理论上的而不是实际的。
有解决这个问题的办法吗?
谢谢。
【问题讨论】:
【参考方案1】:似乎与 How to use method parameters in a Django template?
一种解决方案是将方法的结果传递给模板。类似:
object = Mymodel.objects.get(id=17)
return render_to_response('x.html',
'mymodel': object,
'mymodel_getp': object.getp(request),
'request': request
, context_instance = RequestContext(request))
其他解决方案是编写自定义模板标签:
@register.simple_tag(name="model_getp", takes_context=True)
def model_getp(context, object=None):
return object.getp(context)
然后在模板中:
% model_getp mymodel %
【讨论】:
谢谢。好吧,第一个解决方案是它应该如何以 django 方式使用,但我对这个解决方案的问题是,如果我想将更多对象传递给模板(Myobject.objects.filter()),我想循环他们。一个明显的解决方案是在结果中使用元组,例如 ((mymodel1, mymodel1_getp), (mymodel2, mymodel2_getp)),但这很难看。 第二种解决方案效果很好,我喜欢它(除了 simple_tag 不接受 name 参数),但是如果我想测试结果的存在怎么办?至少在这种形式下它并没有真正起作用: % if model_getp mymodel % 。它在 if 表达式的末尾显示未使用的“mymodel”。 要在 if 语句中使用它,您必须从中创建一个过滤器,计算结果为 bool ***.com/questions/6047959/… 我不确定如何将上下文传递给过滤器 我c。在第一种情况下,当我从视图返回所需的结果时,解决我的问题的“标准方法”是什么,因为我认为我的元组解决方案非常难看。 但是,如果第二种解决方案可以使用 if 标记,那就太好了。以上是关于django - 将参数从模板传递到 models.py 的函数的主要内容,如果未能解决你的问题,请参考以下文章