Domanda

Mi capita spesso di visualizzare i messaggi sulle azioni degli utenti per gli utenti registrati a mio punto di vista app Django utilizzando:

request.user.message_set.create("message to user")

Come potrei fare lo stesso per anonimo (non accesso) degli utenti? Non v'è alcun request.user per gli utenti anonimi, ma la documentazione Django dice che utilizzando il middleware "sessione" si può fare la stessa cosa come il codice di cui sopra. La documentazione Django che si collega alla sessione di middleware afferma che è possibile, ma non sono riuscito a trovare come farlo dalla documentazione sessione.

È stato utile?

Soluzione

http://code.google.com/p/django-session -messages / fino a quando la patch che consente terre sessione basata messaggi in Django albero (come ho visto di recente, è contrassegnato per 1,2, quindi nessuna speranza per l'aggiunta rapida ...).

Un altro progetto con una funzionalità simile è Django Flash ( http://djangoflash.destaquenet.com/ ) .

Altri suggerimenti

Questo è quello che faccio, utilizzando i processori di contesto:

project/application/context.py (controllare i messaggi e aggiungerli al contesto):

def messages(request):
    messages = {}
    if 'message' in request.session:
        message_type = request.session.get('message_type', 'error')
        messages = {'message': request.session['message'],
                    'message_type': message_type}
        del request.session['message']
        if 'message_type' in request.session:
            del request.session['message_type']
    return messages

project/settings.py (aggiungere il contesto al TEMPLATE_CONTEXT_PROCESSORS):

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.request",
    "django.core.context_processors.debug",
    "django.core.context_processors.media",
    "django.core.context_processors.auth",
    "project.application.context.messages",  
)

Con quanto sopra la funzione messages saranno chiamati a ogni richiesta e qualsiasi restituisce verrà aggiunto al contesto del modello. Con questo in luogo, se voglio dare un utente un messaggio, posso fare questo:

def my_view(request):
    if someCondition:
        request.session['message'] = 'Some Error Message'

Infine, in un modello che si può solo controllare se ci sono errori da visualizzare:

{% if message %}
    <div id="system_message" class="{{ message_type }}">
        {{ message }}
    </div>
{% endif %}

Il tipo di messaggio è solo utilizzato per lo stile a seconda di quello che è ( "errore", "avviso", "successo") e il modo in cui questo è l'installazione si può solo aggiungere 1 messaggio alla volta per un utente, ma questo è tutto quello che ho davvero mai bisogno in modo che funziona per me. Si potrebbe essere facilmente modificato per consentire più messaggi e così via.

Memorizzare i dati direttamente nella sessione, che è un oggetto dict-like. Poi nella vista / modello, controllare il valore.

Maggiori informazioni qui:

http: // docs. djangoproject.com/en/dev/topics/http/sessions/#using-sessions-in-views

Si potrebbe anche creare una classe middleware per verificare l'oggetto di sessione per ogni richiesta, e fare la vostra accumulo / abbattere lì.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top