【问题标题】:How to get current URL in jinja2/flask (request.url not working)如何在 jinja2/flask 中获取当前 URL(request.url 不起作用)
【发布时间】:2014-12-04 06:36:06
【问题描述】:

有没有办法在 Jinja2/Flask 中打印当前 URL?

例如如果当前网址是http://www.domain.com/example/1/2

{{ request.path }} 工作并打印/example/1/2,但我如何也可以使用 http:// 获取完整的 URL?

来自文档(here){{ request.url }} 应该可以工作,但它不会产生任何结果。

谢谢

更新

这是来自views.py的渲染/上下文参数:

class EventDetailView(EventObjectMixin, FormView):
    template_name = 'gig/public/about.html'
    context_object_name = 'event'
    form_class = EventPurchaseTicketForm

    def get_context_data(self, **kwargs):
        context = super(EventDetailView, self).get_context_data(**kwargs)

    ...

        return context

【问题讨论】:

  • {{request.path}} 是否真的在您的模板中工作?您可能只是在您的上下文中缺少request。请向我们展示调用 Jinja 模板的渲染方法的代码(或至少为其生成上下文的代码)。
  • 是的,它有效。我正在编辑别人的代码 - 通常在哪里可以找到渲染方法?在 models.py 中?
  • 更有可能在视图代码中(具有该 URL 逻辑的请求处理程序)
  • 好的,谢谢,我正在寻找的典型函数/参数是什么?
  • 任何写着renderrender_templatecontext 的内容都可能出现。

标签: python flask jinja2


【解决方案1】:

如@lfurini 所述,对于有需要额外参数的路线的人来说,接受的答案不太适用。

以下将在构造 URL 时使用视图的参数:

{{ url_for(request.endpoint, **request.view_args) }}

【讨论】:

    【解决方案2】:

    你可以使用{{ url_for(request.endpoint) }},它可以工作。

    【讨论】:

    • 您能否通过解释您的代码如何解决问题来改进您的答案?
    • 请注意,如果与request.endpoint 关联的路由需要一些参数,则会出现错误。这个answer to a similar question 提供了一个更好的主意。
    【解决方案3】:

    找到与此类似的代码,通常在 controller.py__ init__.pyviews.py 中找到:

    from flask import render_template
    ...
    
    @app.route('/example/<arg1>/<arg2>')
    def some_view_function(arg1, arg2):
        ...
    
        return render_template('path/to/your/template.html')
    

    render_template() 是您可以使用的请求和其他变量。

    【讨论】:

      猜你喜欢
      • 2022-10-22
      • 1970-01-01
      • 1970-01-01
      • 2022-07-07
      • 2020-10-24
      • 2011-07-02
      • 1970-01-01
      • 2019-09-23
      • 2010-12-23
      相关资源
      最近更新 更多