我还没有看到任何人实施这种模式,我很想知道它是否在技术上可行。让我举一个使用自定义过滤器看样子的示例:
在此示例中,“get_widget”过滤器将查找作为第一个参数传入的名称或键的MyWidget对象。
模板逻辑
{% get_widget "whizbang" as item %}
<h1>{{item.name}}</h1>
{% get_widget "1234" as item %}
<h1>{{item.name}}</h1>
自定义过滤器
@register.assignment_tag(takes_context=True)
def get_widget(context, widget_name):
try:
return MyWidget.objects.get(name=widget_name)
except MyWidget.DoesNotExist:
return None
但这似乎相当可怕。
我希望看到的是更具动态性的东西:
实施例: 检索MyWidget的实例,其名称为“whizbang”,或者使用它的密钥。 在模板中:
<h1>{{MyWidget.whizbang}}</h1>
<h1>{{MyWidget.1234}}</h1>
问题有两个:
答案 0 :(得分:0)
在筛选完Python文档之后,它看起来像是__getattrr__()
的组合,并且传递了一个类名称就是所需要的。对于回答我自己的问题,我表示歉意。希望这对其他人有用。
<强>模板强>
{{ Menus.HeyDude.DoSomething }}
<强>类强>
from mycode import Menu
class MenuFactory():
def __getattr__(self, name):
try:
return Menu.object.get(name=name)
except Menu.DoesNotExist:
raise AttributeError
中衣背景处理器
from mycode import MenuFactory
def context_processor(request):
return_val = {}
# Add all of the factories
return_val['Menus'] = MenuFactory
return return_val