1

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

总之感谢。

4

2 回答 2

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

请注意,在我看来,我没有返回消息,这是因为消息中间件为我处理了这个问题。我所要做的就是返回一个快捷方式RequestContext所做的事情。render

在模板中:

{% 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 %}

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

于 2013-05-12T09:11:06.600 回答
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。我也有兴趣了解更多策略。如果我错了,请纠正我?

于 2013-05-12T08:30:47.640 回答