views.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')
template.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中的session来验证它,所以如果这个report_id在会话中,新的报告菜单不应该突出显示,但是我更新了尝试过的代码,但它仍然不适用于我。需要帮助
由于
答案 0 :(得分:1)
如果没有看到new_report
视图的代码,则看起来必须根据session.session['report_id']
加载正确的报告信息。我认为,不是通过会话传递类似的东西,你应该在调用redirect时将其作为参数传递给new_report
视图(参见关于重定向的django文档的链接)。请注意,您还必须编辑视图定义。
更好的是,如果您已经在edit_report
中获得了几乎所有的编辑功能,请将new_report
和edit_report
合并到一个视图中。
无论如何,回到被问到的问题。您可以在new_report
视图中检查是否在会话中设置了report_id(我假设您已经这样做了)。然后,基于此,您可以将RequestContext
中的变量传递到模板
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
变量覆盖它
<!-- Menu tabs -->
<a href="/new_report"
{% if highlight_new_report %}
class="highlighted_tab">
{% endif %}
</a>
抱歉应该更清楚。上面的代码是一个如何根据您的report_id
设置类的示例,但我将其保留为非特定,因为我不知道您的模板会是什么样子。
如果您使用上面的代码添加了删除突出显示的CSS类,那么您可以添加另一个添加突出显示的类:
<!-- Menu tabs -->
<a href="/new_report"
{% if highlight_new_report %}
class="highlighted_tab"
{% else %}
class="non_highlighted_tab">
{% endif %}
</a>
其中highlighted_tab
是一个添加突出显示的类,non_highlighted_tab
是一个不添加突出显示的类,或者覆盖已经应用的突出显示样式的<{p>}。
我之所以没有以这种方式编写答案的原因,是因为您可能已经根据当前页面添加了class="active"
之类的内容。因此,我希望您使用上述条件,将此active
类限制为highlight_report = True
答案 1 :(得分:1)
可以使用会话。
通过查看这段代码,我知道您正在为新报告创建会话。但是您尝试做的事情无法处理相同的会话。
我认为,对于新的报告和编辑报告,它们是两种不同的方法。如果是这种情况,它很容易处理。
让我们看看,
1.您应该在编辑报告方法中创建一个会话。
2.应验证该会话是否在新报告中,如果新创建的会话在新报告中,则应设置new_report = False并传递给渲染。
3.您应该在新报告方法中删除新创建的会话,否则菜单将始终不突出显示。
根据上述内容,如果用户点击{% url incident.views.edit_report list.report.id%}
或编辑报告菜单中的报告,则新创建的会话将从编辑报告方法启动并可用。
希望这会给你一个想法。