2009-06-22 14 views
14

Desidero utilizzare alcuni middleware che ho scritto su tutto il mio sito (numero elevato di pagine, quindi ho scelto di non utilizzare i decoratori perché volevo usare il codice per tutte le pagine). L'unico problema è che non voglio utilizzare il middleware per il codice di amministrazione e sembra che sia attivo su di essi.Conditional Django Middleware (o come escludere il sistema di amministrazione)

Esiste un modo per configurare il file settings.py o urls.py, o forse qualcosa nel codice per impedirne l'esecuzione nelle pagine del sistema di amministrazione?

Qualsiasi aiuto molto apprezzato,

Acclamazioni

Paul

risposta

6

si potrebbe verificare il percorso nella process_request (e qualsiasi altro processo _ * - Metodi nel middleware)

def process_request(self, request): 
    if request.path.startswith('/admin/'): 
     return None 
    # rest of method 

def process_response(self, request, response): 
    if request.path.startswith('/admin/'): 
     return response 
    # rest of method 
0

Il Il motivo principale per cui volevo farlo era usare un parser XML nel middleware che stava danneggiando i download non XML. Ho messo un altro codice per rilevare se il codice è XML e non sta tentando di analizzare qualcosa che non dovrebbe.

Per altri middleware in cui questo non sarebbe conveniente, probabilmente userò il metodo piquadrat sopra i profili, o forse semplicemente userò un decoratore di vista - Cheers piquadrat!

25

Un modo generale sarebbe (in base alla risposta del piquadrat)

def process_request(self, request): 
    if request.path.startswith(reverse('admin:index')): 
     return None 
    # rest of method 

In questo modo se qualcuno cambia /admin/ a /django_admin/ si sta ancora coperti.

+0

Ricorda che i tuoi percorsi potrebbero avere un prefisso di lingua! (es./en/admin) – Florian

Problemi correlati