Как в моем шаблоне Django отобразить флажки и типы уведомлений? - PullRequest
2 голосов
/ 08 января 2011

Если это представление в Django_notification (https://github.com/pinax/django-notification/blob/master/notification/views.py), как отобразить флажок? Похоже, здесь нет объектов формы. Обычно я привык к этому: {{myform.thefield}}

@login_required
def notice_settings(request):
    """
    The notice settings view.

    Template: :template:`notification/notice_settings.html`

    Context:

        notice_types
            A list of all :model:`notification.NoticeType` objects.

        notice_settings
            A dictionary containing ``column_headers`` for each ``NOTICE_MEDIA``
            and ``rows`` containing a list of dictionaries: ``notice_type``, a
            :model:`notification.NoticeType` object and ``cells``, a list of
            tuples whose first value is suitable for use in forms and the second
            value is ``True`` or ``False`` depending on a ``request.POST``
            variable called ``form_label``, whose valid value is ``on``.
    """
    notice_types = NoticeType.objects.all()
    settings_table = []
    for notice_type in notice_types:
        settings_row = []
        for medium_id, medium_display in NOTICE_MEDIA:
            form_label = "%s_%s" % (notice_type.label, medium_id)
            setting = get_notification_setting(request.user, notice_type, medium_id)
            if request.method == "POST":
                if request.POST.get(form_label) == "on":
                    if not setting.send:
                        setting.send = True
                        setting.save()
                else:
                    if setting.send:
                        setting.send = False
                        setting.save()
            settings_row.append((form_label, setting.send))
        settings_table.append({"notice_type": notice_type, "cells": settings_row})

    if request.method == "POST":
        next_page = request.POST.get("next_page", ".")
        return HttpResponseRedirect(next_page)

    notice_settings = {
        "column_headers": [medium_display for medium_id, medium_display in NOTICE_MEDIA],
        "rows": settings_table,
    }

    return render_to_response("notification/notice_settings.html", {
        "notice_types": notice_types,
        "notice_settings": notice_settings,
    }, context_instance=RequestContext(request))

Ответы [ 2 ]

3 голосов
/ 11 января 2011

Шаблон по умолчанию для этого представления отмечен в github: https://github.com/pinax/pinax/blob/master/pinax/templates/default/notification/notice_settings.html

ОБНОВЛЕНИЕ: Pinax удалил свои темы, последнюю регистрацию с шаблонами все еще можно найти здесь .

Форма для объекта настроек уведомлений не определена, поэтому элементы флажка (и сама форма) создаются с использованием необработанного HTML:

    <form method="POST" action=""> {# doubt this easy to do in uni-form #}
        {% csrf_token %}
        <table class="notice_settings">
            <tr>
                <th>{% trans "Notification Type" %}</th>
                {% for header in notice_settings.column_headers %}
                    <th>{{ header }}</th>
                {% endfor %}
            </tr>
            {% for row in notice_settings.rows %}
                <tr>
                    <td>{% trans row.notice_type.display %}<br/>
                        <span class="notice_type_description">{% trans row.notice_type.description %}</span>
                    </td>
                    {% for cell in row.cells %}
                        <td>
                            <input type="checkbox" name="{{ cell.0 }}" {% if cell.1 %}checked="yes"{% endif %}/>
                        </td>
                    {% endfor %}
                </tr>
            {% endfor %}
            <tr>
                <td><input type="submit" value="{% trans "Change" %}" /></td>
            </tr>
        </table>
    </form>
0 голосов
/ 11 января 2011

Представление, которое вы показываете, управляет только обработкой отправленного уведомления, но не отображением формы на странице.Вы можете создать свою собственную форму, которая включает поле с именем form_label и включить его на любую страницу, которая публикует данные в этом представлении (это может быть скрытый ввод).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...