में एक कॉल नोड को पास सूची तर्क पास करें, मैं अब कुछ घंटों के लिए Jinja2 विस्तार बनाने के लिए संघर्ष कर रहा हूं, और ऐसा लगता है कि मैं निश्चित रूप से एक विशेष बिंदु पर फंस गया हूं: कॉल नोड को सूची तर्क पास करना। मैंने कुछ अन्य कामकाजी सीमाओं के साथ प्रेरणा पाने की कोशिश की और मैं नहीं देख सकता कि मेरा संदर्भ कोड क्यों करता है जब मेरी सामग्री काम नहीं करती है।एक Jinja2 एक्सटेंशन
असल में क्या मैं चाहता हूँ मेरे टेम्पलेट में सामान इस तरह का है:
{% usebundle "common", "treeview" %}
इस संदर्भ में कुछ सूची में 'आम' और 'treeview' तार जोड़ने चाहिए।
यहाँ मेरी कोड के मुख्य भागों हैं:
class MyExtension(Extension):
def __init__(self, environment):
super(MyExtension, self).__init__(environment)
def parse(self, parser):
lineno = parser.stream.next().lineno
names = []
while parser.stream.current.type != 'block_end':
names.append(parser.parse_expression())
parser.stream.skip_if('comma')
# At this point, names is a correctly filled array of names
call = self.call_method('_callback', args=[nodes.List(names)])
result = nodes.CallBlock([call], [], [], [])
result.set_lineno(lineno)
return result
def _callback(self, names, caller=None):
# Here names should contain a list of names, but it's either undefined or
# a list of Undefined, or I get an error before reaching this callback
# (generally saying that arguments cannot be read)
pass
मैं कई चीजें कोशिश की, लेकिन बात मुझे कहना है कि समस्या वास्तव में (मेरी names
मूल्य की सामग्री को पैरामीटर स्वरूप में है कि बनाता है पार्स फ़ंक्शन) यह है कि यदि मैं nodes.List(names)
को nodes.Const(42)
से प्रतिस्थापित करता हूं, तो मुझे कॉलबैक पैरामीटर में एक सही 42
मान प्राप्त होता है।
[संपादित करें] कोड के इस संस्करण के लिए त्रुटि विवरण निम्नलिखित है:
Exception on /login [GET]
Traceback (most recent call last):
File "E:\Python27\lib\site-packages\flask-0.9-py2.7.egg\flask\app.py", line 1687, in wsgi_app
response = self.full_dispatch_request()
File "E:\Python27\lib\site-packages\flask-0.9-py2.7.egg\flask\app.py", line 1360, in full_dispatch_request
rv = self.handle_user_exception(e)
File "E:\Python27\lib\site-packages\flask-0.9-py2.7.egg\flask\app.py", line 1358, in full_dispatch_request
rv = self.dispatch_request()
File "E:\Python27\lib\site-packages\flask-0.9-py2.7.egg\flask\app.py", line 1344, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "E:\myapplication\user.py", line 126, in login
return template_or_json('user/login.html', form=form)
File "E:\myapplication\ajax.py", line 32, in template_or_json
return render_template(template_name, **context)
File "E:\Python27\lib\site-packages\flask-0.9-py2.7.egg\flask\templating.py", line 125, in render_template
context, ctx.app)
File "E:\Python27\lib\site-packages\flask-0.9-py2.7.egg\flask\templating.py", line 107, in _render
rv = template.render(context)
File "E:\Python27\lib\site-packages\jinja2-2.6-py2.7.egg\jinja2\environment.py", line 894, in render
return self.environment.handle_exception(exc_info, True)
File "E:\myapplication\templates\user\login.html", line 1, in top-level template code
{% extends "layout.html" %}
File "E:\Python27\lib\site-packages\jinja2-2.6-py2.7.egg\jinja2\environment.py", line 443, in _generate
return generate(source, self, name, filename, defer_init=defer_init)
File "E:\Python27\lib\site-packages\jinja2-2.6-py2.7.egg\jinja2\compiler.py", line 63, in generate
generator.visit(node)
File "E:\Python27\lib\site-packages\jinja2-2.6-py2.7.egg\jinja2\visitor.py", line 38, in visit
return f(node, *args, **kwargs)
File "E:\Python27\lib\site-packages\jinja2-2.6-py2.7.egg\jinja2\compiler.py", line 803, in visit_Template
frame.inspect(node.body)
File "E:\Python27\lib\site-packages\jinja2-2.6-py2.7.egg\jinja2\compiler.py", line 201, in inspect
visitor.visit(node)
File "E:\Python27\lib\site-packages\jinja2-2.6-py2.7.egg\jinja2\visitor.py", line 38, in visit
return f(node, *args, **kwargs)
File "E:\Python27\lib\site-packages\jinja2-2.6-py2.7.egg\jinja2\compiler.py", line 347, in visit_CallBlock
self.visit(node.call)
File "E:\Python27\lib\site-packages\jinja2-2.6-py2.7.egg\jinja2\visitor.py", line 39, in visit
return self.generic_visit(node, *args, **kwargs)
File "E:\Python27\lib\site-packages\jinja2-2.6-py2.7.egg\jinja2\visitor.py", line 43, in generic_visit
for node in node.iter_child_nodes():
AttributeError: 'list' object has no attribute 'iter_child_nodes'
के बजाय का उपयोग करने से आप अपने त्रुटि संदेश और/या पूर्ण ट्रैस बैक शामिल करने के लिए चाहता हूँ एक बेहतर जवाब पाने के लिए किया है। – stderr