2009-10-11 51 views
0

我有一堆模型,其中有一些选项,这些选项在DB中配置如下。使用模板标签中的模型选择

COL_CHOICES =(
      (1, 'Not Applicable'), 
      (2, 'Black'), 
     ) 

COL2_CHOICES =(
      (1, 'Green'), 
      (2, 'Blue'), 
     ) 

我要显示所有这些选项的菜单在我的模板,(用作菜单)。由于这些选项存储在代码中,因此查询数据库没有意义。什么是最好的方式来使这些可用?

他们应该可以在所有页面上使用,模板标签将是要走的路。然而,模板标签看起来像什么?

更新 我曾尝试FFQ模板标签:

class OptionsNode(Node): 
    def __init__(self, colours, varname): 
     self.colours = colours 
     self.varname = varname 

    def render(self, context): 
     context[self.varname] = self.colours 
     return '' 

def get_options(parser, token): 
    return OptionsNode(COLOUR_CHOICES, 'colour') 

UPDATE2 所以上面的代码工作,并通过使用colour.1/colour.2等每个访问值值。

请参见下面的完整的答案

回答

0

由于没有人发布足够的响应,因此如果您正在寻找类似的东西,那么这就是它。如果任何人都能想到一个更有效的方法,我会很高兴听到它。 :

您需要从模型文件中导入您的选择。

class OptionsNode(Node): 
    def __init__(self, options, varname): 
     self.options = options 
     self.varname = varname 

    def render(self, context): 
     context[self.varname] = self.options 
     return '' 

def get_options(parser, token): 
    bits = token.contents.split() 

    if len(bits) !=4: 
     raise TemplateSyntaxError, "get_options tag takes exactly Four arguments" 
    if bits[2] != 'as': 
     raise TemplateSyntaxError, "Third argument to get_options tag must be 'as'" 
    if bits[1] == 'COL_CHOICES': 
     choice = COL_CHOICES 
    return OptionsNode(choice, bits[3]) 

get_options = register.tag(get_options) 

在模板中使用:

{% get_options your_choices as variable %} 
0

如果他们在代码中,你可以将其直接转给模板背景:响应

render_to_response('mytemplate.html', { 
         'col_choices': COL_CHOICES, 
         'col2_choices': COL2_CHOICES 
        }) 

编辑评论:如果你需要这个在包含通用视图的每个页面上,最好的办法是使用模板标签。

+0

丹尼尔,感谢的响应,这会是一个看法?通用视图又如何,如果你需要它们在所有页面上可用? – ismail 2009-10-11 13:14:27

+0

查看我上面的回复。 – 2009-10-11 13:46:05

+0

感谢您的回复。当我尝试返回COL_OPTIONS时,我得到的是模板中的一个元组,并且我不能单独访问每个选项或循环访问它。 – ismail 2009-10-11 14:12:05