高级:如何在Jinja2中使用href

the*_*hey 6 python jinja2 pyramid

我想href在jinja2模板中使用,根据具体结果将用户发送到特定结果,id以了解有关该特定结果的更多信息.我创建了一个routeurl:('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}')
Run Code Online (Sandbox Code Playgroud)

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 %}
Run Code Online (Sandbox Code Playgroud)

查看呈现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
Run Code Online (Sandbox Code Playgroud)

Rob*_*obᵩ 6

您需要将ID添加到URL路径中.添加id的一种方法(从Python变量a.id到您的URL是使用%字符串格式化运算符,如下所示:

<a href="{{ '/view_assessment_result/%s'%a.id }}">{{ a.id }}</a>
Run Code Online (Sandbox Code Playgroud)

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

<a href="{{ '/view_assessment_result/%s'%a.id|urlencode }}">{{ a.id }}</a>
Run Code Online (Sandbox Code Playgroud)