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')

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 のセッションを使用して検証することを考えているので、この 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_reportして 1 つのビューにします。new_reportedit_report

とにかく、尋ねられている質問に戻ります。ビューのセッションでreport_idが設定されているかどうかを確認できnew_reportます(すでにこれを行っていると思います)。次に、これに基づいて、変数をRequestContextテンプレートに渡すことができます

Views.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>

は、ハイhighlighted_tabライトを追加するクラスであり、追加しnon_highlighted_tabないクラス、または既に適用されているハイライト スタイルをオーバーライドするクラスです。

そもそもこのように答えを書かなかった理由は、おそらくclass="active"現在のページに基づいて追加されたようなものをすでに持っているからです。activeしたがって、このクラスの追加を次の場合に制限するために、上記のような条件を使用することを期待していましたhighlight_report = True

于 2013-07-10T21:14:02.640 に答える