【问题标题】:Advanced: How to use href in Jinja2进阶:如何在 Jinja2 中使用 href
【发布时间】:2016-01-11 13:25:01
【问题描述】:

我想在jinja2 模板中使用href 将用户发送到基于id 的特定结果,以了解有关该特定结果的更多信息。我创建了一个route url:('view_assessment_result', '/view_assessment_result/{id}'),它根据id 呈现有关特定结果的所有详细信息。

我想做的事:
当用户点击ID 号码时,他们将被发送到路由view_assessment_result/{some_id},该路由将根据在迭代for a in assessment... 中找到的id 呈现该页面的细节。 我尝试调查案例,但其他人似乎在使用Flask,我没有使用它。下面的模板代码没有完成手头的任务。

见下面的代码:

路由配置:

    #Route convention: resource 'name' 'url dispath'
    config.add_route('view_assessment_result', '/view_assessment_result/{id}')

神社模板

        <tr>
        {% for a in assessment_results %}
                <td><a href="{{ '/view_assessment_result' }}">{{ a.id }}</a></td>
            <td>{{ a.owner }}</td>
            <td>{{a.assessment }}</td>
        </tr>
        {% endfor %}

查看上面href发送的具体结果的配置:

@view_config(route_name='view_assessment_result', request_method='GET', renderer='templates/analyst_view.jinja2')
def view_assessment_result(request):
    with transaction.manager:
        assessment_result_id = int(request.matchdict['id'])
        assessment_result = api.retrieve_assessment_result(assessment_result_id)
        if not assessment_result:
            raise HTTPNotFound()
    #more code

【问题讨论】:

    标签: python jinja2 pyramid


    【解决方案1】:

    您需要将 id 添加到您的 URL 路径中。添加 id 的一种方法(从 Python 变量 a.id 到您的 URL 是使用 % string formatting operator,如下所示:

    <a href="{{ '/view_assessment_result/%s'%a.id }}">{{ a.id }}</a>
    

    此外,如果您的 a.id 可能包含特殊字符(/&amp; 等),您可以通过 urlencode 过滤器对其进行转义:

    <a href="{{ '/view_assessment_result/%s'%a.id|urlencode }}">{{ a.id }}</a>
    

    【讨论】:

    • 我得到 '404 Not Found, The resource could not be found., /view_assessment_result` ... {{a.id}} 只是打印一个数字,例如2
    • 哪个 URL 生成 404?
    • 当我将您的建议更改为:&lt;a href="{{ '/view_assessment_result/%s'%a.id|urlencode }}"&gt;{{ a.id }}&lt;/a&gt; 注意将? 更改为/
    • 完美。谢谢罗伯。现在我没有在静态 IP 上运行它......因此0.0.0... 谢谢你的帮助! wild card s 和 a 在这里代表什么?介意将其添加到您的答案中吗?
    • %s 调用string formatting,这是一个相当基本的 Python 字符串操作。如果您对此不熟悉,您可能需要查看Python Tutorial,它将解释该语言以及该语言的许多其他方面。我将在答案中添加对字符串格式的引用。
    【解决方案2】:

    您可以使用request.route_path 生成网址。

    <a href="{{ request.route_path('view_assessment_result', id=a.id) }}">{{ a.id }}</a>
    

    此处的文档:http://docs.pylonsproject.org/projects/pyramid/en/latest/api/request.html#pyramid.request.Request.route_path

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-04
      • 2021-01-25
      • 2021-11-21
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      相关资源
      最近更新 更多