Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django自定义模板标记,带有';compile#u filter(令牌[2])';不';行不通_Python_Django_Templatetags - Fatal编程技术网

Python Django自定义模板标记,带有';compile#u filter(令牌[2])';不';行不通

Python Django自定义模板标记,带有';compile#u filter(令牌[2])';不';行不通,python,django,templatetags,Python,Django,Templatetags,我试图实现T.Stone就我的问题“how-do-I-pass-a-lot-parameters-to-views-in-django”([link text][1])提出的解决方案。 我不能设法得到任何结果。很难找到有关compile\u filter()的信息,但据我所知cls(queryset=parser.compile\u filter(tokens[2]),template=template)应该使用“变量”标记[2]呈现模板。但这似乎不起作用 以下是我的实现代码: models.p

我试图实现T.Stone就我的问题“how-do-I-pass-a-lot-parameters-to-views-in-django”([link text][1])提出的解决方案。
我不能设法得到任何结果。很难找到有关
compile\u filter()
的信息,但据我所知
cls(queryset=parser.compile\u filter(tokens[2]),template=template)
应该使用“变量”标记[2]呈现模板。但这似乎不起作用

以下是我的实现代码:
models.py:

class SalesRecord(models.Model):
    name = models.CharField(max_length=100)
    month = models.CharField(max_length=10)
    revenue = models.IntegerField()
    def __unicode__(self):
        return self.name + " - " + self.month + " - " + str(self.revenue)
views.py:

def test(request, *args, **kwargs):
    name = 'John'
    monthly_sales_qs = SalesRecord.objects.filter(name=name)
    print monthly_sales_qs
    return render_to_response('test.html', locals())
mytags.py:

class DataForTag(template.Node):
    @classmethod
    def handle_token(cls, parser, token, template):
        tokens = token.contents.split()
        if tokens[1] != 'for':
                raise template.TemplateSyntaxError("First argument in %r must be 'for'" % tokens[0])

        if len(tokens) == 3:
            return cls(queryset=parser.compile_filter(tokens[2]), template=template)
        else:
            raise template.TemplateSyntaxError("%r tag requires 2 arguments" % tokens[0])

    def __init__(self, queryset=None, template=None):
        self.queryset = queryset
        self.template = template

    def render(self, context):
        return render_to_string(self.template, {'queryset':self.queryset})

@register.tag
def render_data_table(parser, token):
    return DataForTag.handle_token(parser, token, 'testtable.html')
test.html:

{% load mytags %}
{% render_data_table for monthly_sales_qs %}
testtable.html:

<table class="tabledata">
    <tr>
    {% for m in queryset.month %}
        <td>queryset.revenue</td>
     {% endfor %}
     </tr>
</table>

{queryset.month%中m的%s}
查询收入
{%endfor%}
模板只返回一个空页面。在我看来,查询集是空的。 有人知道我做错了什么吗?(可能是一些初学者的愚蠢;)

马克

两件事:前几天我为你发布代码时,我很忙。在
渲染中
方法变量需要这样解析

def render(self, context):
    qs = self.queryset.resolve(context)
    return render_to_string(self.template, { 'queryset': qs } )
此外,在模板中,这是错误的:

{% for m in queryset.month %}
    <td>queryset.revenue</td>
 {% endfor %}
{%m在queryset.month%}
查询收入
{%endfor%}
首先,变量需要像
{{{queryset.revenue}}
一样包装在{{{}中,其次,您没有对
m
值进行任何操作,因此让
for
循环毫无意义

最后,我在
django.contrib.comments
应用程序中找到的答案中向您展示的模式。如果您想遵循一些现有/工作示例,我建议您查看comments模板标记。该应用程序中有很多很棒的想法