实施确认和警报消息的最佳方式

时间:2013-05-12 00:13:16

标签: django django-templates django-views

我想知道你们是否可以与我分享你在Django中显示警报和确认消息的策略。我真的不确定实现这一目标的最佳方法是什么。你有一个单独的.py文件与消息和包装函数,或者你只是硬编码代码中的一切?而且您认为应该优先考虑视图或模板?

无论如何,谢谢。

2 个答案:

答案 0 :(得分:2)

Django附带了messages应用程序,可以帮助解决这个问题。

在您的视图中,您将添加所需的消息:

from django.contrib import messages
from django.shortcuts import render

def someview(request):
    # your normal code
    messages.add_message(request, messages.INFO, 'Yeehaw!')
    return render(request, 'sometemplate.html')

注意我没有在我的视图中返回消息,这是因为messages middleware为我处理了这个问题。我所要做的就是返回一个RequestContext render shortcut

在模板中:

{% if messages %}
  {% for message in messages %}
    <div{% if message.tags %} class="alert alert-{{ message.tags }}"{% endif %}>
      <a class="close" data-dismiss="alert" href="#">&times;</a>
      {{ message }}
    </div>
  {% endfor %}
{% endif %}

通常,您会将上述代码放在每个模板继承的基本模板之一中;就是这样。

答案 1 :(得分:0)

我使用可重复使用的视图来显示确认

重新使用视图

def bootstrap_confirm(
        request,
        heading,
        message,
        yes_color='success',
        yes_text='Yes',
        cancel_color='danger',
        cancel_text='No',
        cancel_url='',
        box_color='info',
        base_name='base.html'):
    if request.method == 'POST':
        confirm = request.session['confirm_value']
        assert request.POST.get('confirm') == confirm, "Error"
        return request.POST.get('submit_button') == yes_text
    else:
        confirm = get_random_string(16)
        request.session['confirm_value'] = confirm
        return render_to_response('django-helpers/twitter-bootstrap/confirm.html', request, {
            'confirm_value': confirm,

            'confirm_heading': heading,
            'message': message,
            'base_name': base_name,
            'box_color': box_color,

            'yes_color': yes_color,
            'yes_text': yes_text,

            'cancel_color': cancel_color,
            'cancel_text': cancel_text,
            'cancel_url': cancel_url,
        })

可重复使用的模板

{% extends base_name %}

{% block main-contents %}
    <h2>{{ confirm_heading }}</h2>
    <form action="" method="post">
        {% csrf_token %}
        <input type="hidden" name="confirm" value="{{ confirm_value }}">

        <div class="alert alert-{{ box_color|default:"info" }}">
            <div>{{ message }}</div>
        <br>
            <div>
                <input type="submit" class="btn btn-{{ yes_color|default:"success" }}" name="submit_button" type="submit" value="{{ yes_text|default:"Yes" }}">
                {% if cancel_url %}
                    <a href="{{ cancel_url }}" class="btn btn-{{ cancel_color|default:"danger" }}">{{ cancel_text|default:"No" }}</a>
                {% endif %}
            </div>
        </div>
    </form>
{% endblock %}

查看

def confirm(request):
    msg = '...'
    heading = '...'
    op = bootstrap_confirm(request, heading, msg)
    if isinstance(op, HttpResponse):
        return op

    if op == True:
        # Implement custom logic
    elif op == False:
        # Implement custom logic

您也可以使用类似的可重用视图来显示消息。此代码来自我的库django-helpers。我也有兴趣了解更多策略。如果我错了,请纠正我?