如何为Jinja2宏处理额外的args和kwargs?文档不是很清楚.
例如,这显然是错误的:
{% macro example_1(one, two, **kwargs) %}
do macro stuff
{% endmacro %}
Run Code Online (Sandbox Code Playgroud)
结果
jinja2.exceptions.TemplateSyntaxError
TemplateSyntaxError: expected token 'name', got '**'
Run Code Online (Sandbox Code Playgroud)
该文件说:
kwargs
像varargs但是关键字参数.所有未使用的关键字参数都存储在此特殊变量中.
不幸的是,任何额外关键字参数的组合都是错误,
{% macro example_2(one, two) %}
do macro stuff
{% endmacro %}
{{ example_2(one, two, test='test') }}
TypeError: macro 'example_2' takes no keyword keyword argument 'test'
Run Code Online (Sandbox Code Playgroud)
我没有例子,也没有在Jinja2源代码atm中讨论.此时我不清楚文档.任何想法都赞赏.
我正在使用Carrierwave上传文件,我有它的工作.
我的问题是尝试更改上传文件的名称.
在生成的uploader.rb中有一个我认为我应该使用的方法
def filename
"something.jpg" if original_filename
basename = "what"+orginal_filename if original_filename, works
basename = (0...8).map{65.+(rand(25)).chr}.join if original_filename # will create a random name for each version, e.g. the orginal, the thumb, and the filename in the db, useless
end
Run Code Online (Sandbox Code Playgroud)
我似乎无法访问sanitized_file.rb中的'extension'或'content_type'之类的项目,因此这有点超出我目前的技能水平.
这样做的任何建议或练习,即为上传的文件生成文件名,该文件与carrierwave默认值一样(什么都不做,但是会继续执行每个版本)?看起来它应该很简单,但我偶然发现了这一点.
可以为蓝图设置error_handler吗?
@blueprint.errorhandler(404)
def page_not_found(error):
return 'This page does not exist', 404
Run Code Online (Sandbox Code Playgroud)
编辑:
https://github.com/mitsuhiko/flask/blob/18413ed1bf08261acf6d40f8ba65a98ae586bb29/flask/blueprints.py
您可以指定应用程序范围和蓝图本地error_handler
所以,使用和学习sqlalchemy.
我有一个实例,我需要得到一个值.如果该值存在,则返回它.如果不计算并返回它.
总有人会说"你做错了",总的来说,对改进的投入是值得赞赏的.但是,我正在研究如何在不明确管理会话的情况下完成此操作,因为我正在开发的工作正在开始增长,并且在我想要更新实例时不断管理会话是有问题的.这让我觉得我是其实这样做是错误的.
那么如何修复下面的方法以不明确管理会话?
def method(self, session):
if self.i_needed_this is None:
self.i_needed_this = calculate(calcutron)
session.add(self)
session.commit()
return self.i_needed_this
else:
return self.i_needed_this
Run Code Online (Sandbox Code Playgroud)
也许这个问题应该标题为"让实例会话意识到所以我并不总是明确地管理它",如果这是一个愚蠢的问题,至少告诉我为什么用例子并指出我其他人要求更好的地方.
编辑:显然,导入我正在使用作品的会话,它是可用的,所以也许它是一个非问题或未来的,当我更熟练的sqlalchemy.
我正在使用backbone.js,我想知道是否有更简洁的解决方案来创建模型/集合的"无限滚动"情况,而不是我一直在寻找的模块(有几个可能是jquery,可能更多其他图书馆).
有些搜索几乎没有出现,所以我想在尝试用骨干构建自己的解决方案之前我会问,如果我应该在骨干集合之外构建一些东西,或者是否有人尝试过类似的东西.
我想创建一个蓝图; 我当前的蓝图不是问题.我可以做这个.
但是,我想在我的应用程序中使用烧瓶扩展(对于我的情况,我想集成flask-Cache)?
到目前为止我所做的一切都有错误:
cache = Cache(my_blueprint)
以不同的形式导入Cache和Cache的各个部分
所以像flask-cache这样的东西很简单,可以包裹我的app:
from flask.ext.cache import Cache
cache = Cache(app)
Run Code Online (Sandbox Code Playgroud)
但是在蓝图中使用它或使用蓝图我现在还不太明白.
编辑:不太明显的解决方案是从扩展程序中删除并构建我自己的库以导入蓝图,但这是更多的工作,我还没有完成.扩展/蓝图似乎与我现在的理解水平不兼容.
我用nltk标记文本,只是将句子输入wordpunct_tokenizer.这会分裂收缩(例如'不要'到'不'+"'"+'t'),但我希望将它们保持为一个单词.我正在改进我的方法以获得更加精确和精确的文本标记化,因此我需要深入研究nltk标记化模块,而不仅仅是简单的标记化.
我猜这很常见,我想要其他人的反馈,他们之前可能不得不处理这个问题.
编辑:
是的,这是一个普遍的,泼溅的问题,我知道
另外,作为nlp的新手,我是否需要担心收缩?
编辑:
SExprTokenizer或TreeBankWordTokenizer似乎正在做我现在正在寻找的东西.
传奇继续,从原始线程延伸.
所以,我有一些东西在python代码中制作宏:
from flask import get_template_attribute
from jinja2 import Template
class InternalMacro(object):
"""
Creates a macro given a name, internal macro text, and content to fill(as namedtuple(t.var), dict(k,v), list(i), or other)
"""
def __init__(self, name = None,
text = None,
content_is = None):
self.name = name
self.macro_name = "{}_template".format(self.name)
self.macro_var = "{}_macro".format(self.name)
self.text = text
self.content_is = content_is
self.macro_txt = self.format_text
@property
def is_tuple(self):
return "{{% macro {0}(t) %}}{1}{{% endmacro %}}".format(self.macro_var, self.text)
@property
def is_dict(self):
return "{{% macro …Run Code Online (Sandbox Code Playgroud) 我需要在YAML文件中存储一个RSA密钥对,但是对yaml语法的理解仍然有限且缺乏示例让我寻找答案.
我将开始研究我所拥有的东西,但我想知道是否有人能够快速而简洁地解释如何在yaml中存储这种性质的东西.
我正在尝试同时处理2件新事物,因此我们非常感谢您在简化和澄清方面的帮助.
from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy import Column, Float, event
class TimeStampMixin(object):
@declared_attr
def __tablename__(cls):
return cls.__name__.lower()
created = Column(Float)
modified = Column(Float)
def __init__(self, created = None,
modified = None):
self.created = created
self.modified = modified
def create_time(mapper, connection, target):
target.created = time()
#def modified_time(mapper, connection, target):
# target.modified = time()
event.listen(TimeStampMixin, 'before_insert', create_time)
#event.listen(TimeStampMixin, 'before_update', modified_time)
Run Code Online (Sandbox Code Playgroud)
所以我想创建一个我可以在任何类中应用的mixin:
class MyClass(TimeStampMixin, Base):
etc, etc, etc
Run Code Online (Sandbox Code Playgroud)
此类继承在创建时创建时间戳并在更新时创建/修改时间戳的功能.
在导入时我收到此错误:
raise exc.UnmappedClassError(class_)
sqlalchemy.orm.exc.UnmappedClassError: Class 'db.database.TimeStampMixin' is not mapped
Run Code Online (Sandbox Code Playgroud)
aaaand我在这一点上很难过.
python ×6
flask ×2
jinja2 ×2
sqlalchemy ×2
backbone.js ×1
blueprint ×1
carrierwave ×1
events ×1
file-upload ×1
jquery ×1
key ×1
macros ×1
model ×1
nlp ×1
nltk ×1
rsa ×1
ruby ×1
templates ×1
yaml ×1