在我最近的项目中,我选择了flask-moment而不是moment.js。但是,它会一直显示UndefinedError: 'moment' is undefined
。
我使用了这样的工厂模式:
from config import config
from exts import babel, db, login_manager, mail, moment
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
...
moment.init_app(app)
return app
我在{{ moment.include_moment() }}
文件末尾添加base.jinja2
,并且已成功加载。我写了一个包含这段代码的components.jinja2
:
{% macro render_file_thumbnail(file) %}
<div class="">
<hr>
<div class="media">
<div class="media-left">
<a href="{{ url_for('people.profile', user_id=file.uploader.id ) }}">
<img class="media-object file-th-avatar img-rounded" src="{{ file.uploader.avatar }}" alt="{{ file.uploader.nickname }}">
</a>
</div>
<div class="media-body">
<h6 class="file-th-header">
<a href="{{ url_for('file.file_display', page_number=1, file_id=file.id) }}">
{{ file.file_name }}
</a>
</h6>
<p>
<span class="text-muted fa fa-fw fa-institution"></span>
<a href="{{ url_for('course.course', course_id=file.course.id, page_number=1) }}">
{{ file.course.course_name }}
</a>
<span class="text-muted fa fa-fw fa-pencil"></span>
{{ file.author }}
<span class="text-muted fa fa-fw fa-download"></span>
{{ file.downloaded_times}} {{ _('time(s)') }}
<span class="text-muted fa fa-fw fa-clock-o"></span>
{{ moment(file.uploaded_time).fromNow(refresh=True) }}
</p>
</div>
</div>
</div>
{% endmacro %}
我将其导入渲染模板,然后出现错误。
但如果我使用{% include %}
而不是marco,问题就解决了!那么我怎样才能继续使用marco并同时解决问题呢?
谢谢!
答案 0 :(得分:1)
如果您没有指示它,则不会将上下文传递给宏。您可以通过导入带上下文的宏
来解决此问题{% from "your_macro_file" import render_file_thumbnail with context %}
请参阅doc和this question