1

视图.py

def edit_report(request, report_id):
    """Edit report navigation from action needed screen
    """
    user = request.user
    if 'report_id' in request.session:
        del request.session['report_id']
    try:
        member = Members.objects.get(member=user)
        account_user = member.user
    except:
        account_user = user.id
    request.session['report_id'] = report_id
    request.session['account_user'] = account_user
    return redirect('incident.views.new_report')

模板.html

<td class="irlist-num"><a href="{% url incident.views.edit_report list.report.id%}">{{list.report.incident_number}}{%if list.report.is_draft%} DRAFT{% endif %}</a> </td>

现在,当使用新报告选项卡创建新报告时,该选项卡将突出显示。

{% url incident.views.edit_report list.report.id%}以上视图用于编辑报告。在模板中,如果用户单击报告名称链接(我想将其自定义为在通过此 edit_report 打开报告时不突出显示。

我正在考虑使用 report_id 中的会话对其进行验证,因此如果此 report_id 处于会话中,则新报告菜单不应突出显示,但我更新了尝试过的代码,但它仍然对我不起作用。需要帮助

谢谢

4

2 回答 2

1

It is possible to do using session.

By seeing this bit of code,i understand that you are creating a session for new report.But what you are trying to do is not possible to handle with the same session.

I think,for new report and edit report their are two different methods.If this is the case its easy to handle.

Let us see this,

1.You should create a session in edit report method.

2.Should validate,whether that session is in new report,if that newly created session is in new report should set new_report=False and pass to render.

3.You should delete that newly created session in new report method,if not then menu will always be not highlighted.

As per the above one,if the user clicks report from {% url incident.views.edit_report list.report.id%} or edit report menu,the newly created session gets started from edit report method and will be available.

Hope this gives you an idea.

于 2013-07-11T11:06:19.837 回答
1

在没有看到new_report视图代码的情况下,看起来它必须加载基于session.session['report_id']. 我认为与其通过会话传递类似的东西,不如在调用重定向new_report时将其作为参数传递给视图(请参阅重定向上的 django 文档链接)。请注意,您还必须编辑视图定义以执行此操作。

更好的是,如果您已经拥有几乎所有的编辑功能,请将其合并edit_reportnew_report一个视图中edit_report

无论如何,回到被问到的问题。您可以检查是否在new_report视图中的会话中设置了 report_id(我假设您已经这样做了)。然后基于此,您可以将 a 中的变量传递RequestContext给您的模板

视图.py

def new_report(request):
    view_template = loader.get_template('template.html')
    if 'report_id' in request.session:
        highlight_new_report = True
    else:
        highlight_new_report = False
    view_context = RequestContext(request,{
        'highlight_new_report' : highlight_new_report
    })
    return HttpResponse(view_template.render(view_context))

然后,无论菜单在您的模板中的何处(请注意,这很可能在由 扩展的基本模板中your_template.html),您可以使用它来决定要添加到选项卡/链接的类。可能已经添加了一个类来突出显示它,您应该能够根据highlight_new_report模板中现在可用的变量覆盖它

template.html(或模板 template.html 扩展)

<!-- Menu tabs -->
<a href="/new_report" 
    {% if highlight_new_report %}
        class="highlighted_tab">
    {% endif %}
</a>

编辑以获取更多信息

抱歉应该更清楚。上面的代码是如何根据你的 设置类的示例report_id,但我没有具体说明,因为我不知道你的模板会是什么样子。

如果您使用上面的代码添加了一个移除高亮的 CSS 类,那么您可以添加另一个将添加高亮的类:

template.html(或模板 template.html 扩展)

<!-- Menu tabs -->
<a href="/new_report" 
    {% if highlight_new_report %}
        class="highlighted_tab"
    {% else %}
        class="non_highlighted_tab">
    {% endif %}
</a>

Wherehighlighted_tab是一个添加高亮的类,non_highlighted_tab是一个不添加高亮的类,或者它覆盖了已经应用的高亮样式。

我一开始没有这样写答案的原因是因为您可能已经有了class="active"基于当前页面添加的内容。因此,我希望您使用上述条件,将此类的添加限制为何activehighlight_report = True

于 2013-07-10T21:14:02.640 回答