高级:如何在Jinja2中使用href

时间:2015-10-13 17:13:38

标签: python jinja2 pyramid

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

我想做什么:
当用户点击ID号码时,系统会将其发送到路由view_assessment_result/{some_id},该路由将根据迭代id中找到的for a in assessment...呈现该页面的详细信息。 我试着调查案例,但其他人似乎正在使用我不使用的Flask。下面的模板代码无法完成手头的任务。

见下面的代码:

路线配置:

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

jinja模板

        <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

2 个答案:

答案 0 :(得分:5)

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

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

另外,如果您的a.id可能包含特殊字符(/&等),则可以通过urlencode过滤器将其转义:

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

答案 1 :(得分:1)

您可以使用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