2015-12-20 7 views
13

Il tutorial sul sito crea un'app denominata sondaggi. E 'Django 1.9, in modo che il suo nel INSTALLED_APPSConfuso un po 'sulla convenzione di denominazione INSTALLED_APPS di django

polls.apps.PollsConfig 

sto guardando un tutorial egli chiama la newsletter app e in INSTALLED_APPS lui ha

newsletter 

sta usando 1.8, però. Sto usando 1.9. Ho visto altri tutorial e hanno anche aggiunto un nome senza punti nella sintassi come fa lui. Capisco che le cose potrebbero essere diverse, questo è capito. Per essere chiari se ho chiamato i miei cani app ,. nelle applicazioni installate che sarebbe chiamato in questo modo

dogs.apps.DogsConfig 

o se fosse albero sarebbe

tree.apps.TreeConfig 

è che come la convenzione di denominazione va? inoltre supponevo che le cose si sarebbero accorciate nelle versioni più recenti e più convenienti. così andare da solo l'aggiunta di

newsletter, 

di dover digitare le

polls.apps.PollsConfig 

sembra strano per me. Ma sono nuovo, quindi forse mi manchi qualcosa. Qualsiasi consiglio è benvenuto

risposta

19

Questa è la funzione Application Configuration, nuova su Django 1.7.

Fondamentalmente, ora è possibile elencare in INSTALLED_APPS il modulo che contiene l'applicazione o una classe che deriva da django.apps.AppConfig e definisce il comportamento dell'applicazione.

Questa caratteristica offre diversi vantaggi:

  • applicazioni può essere configurato più facilmente, e anche la sottoclasse di personalizzazione.
  • È possibile avere più app nello stesso modulo.

moduli di applicazioni possono definire la variabile speciale modulo di default_app_config per specificare il nome del loro AppConfig, in modo che possano utilizzare le nuove funzionalità senza dover specificare il nome completo di quella classe in INSTALLED_APPS. Ma questa è una funzionalità di retrocompatibilità e si raccomandano nuove applicazioni per scrivere il nome completo AppConfig.

In ogni caso, la maggior parte delle app django/contrib utilizza tale default_app_config per la compatibilità con le vecchie configurazioni. Si veda ad esempio il file django/contrib/messages/__init__.py è solo:

from django.contrib.messages.api import * 
from django.contrib.messages.constants import * 

default_app_config = 'django.contrib.messages.apps.MessagesConfig' 

Quindi, aggiungendo in su, per richiesta OP:

  • Se si aggiunge nel INSTALLED_APPS il typename foo.apps.FooConfig, allora quella classe verrà utilizzato per impostare la foo app, 1.7 stile (consigliato).
  • Se si aggiunge nel INSTALLED_APPS nome pianura foo, quindi:

    • se c'è una variabile foo.default_app_config questa classe verrà utilizzata per impostare il foo app, 1,7 stile. La maggior parte (tutte?) Le app Django standard hanno questa variabile, quindi non è necessario cambiare il tuo INSTALLED_APPS quando si passa da Django-1.6 a Django-1.7.
    • se non esiste una variabile di questo tipo, verrà utilizzata l'applicazione in stile 1.6, con valori predefiniti per le opzioni di configurazione avanzate.
+0

Non sono ancora chiaro. Sarebbe più facile per me seguire se dici "quando scrivi 'polls.apps.PollsConfig' in INSTALLED_APPS hai accesso a questo ma se scrivi 'polls' in INSTALLED_APPS questo. – losee

+0

@losee: ho aggiunto ulteriori spiegazioni sull'utilizzo, penso che sia quello che hai richiesto. – rodrigo

+0

dopo aver letto e riletto e alcuni esperimenti sono stati inseriti e cliccati. Grazie – losee

2

Nel setup.py, sotto le applicazioni installate è sufficiente aggiungere app_name come

INSTALLED_APPS = [ 
    *'polls',* 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
] 
0

Se si utilizza un metodo HttpResponse di base per la restituzione del vostro vista che si può ottenere via con il nome nel vostro settings.py, e di fatto con una semplice risposta HTTP credo che avete solo bisogno di inlcude l'espressione regolare appropriata nel urls.py (miosito):

INSTALLED_APPS = [ 
    'polls', 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
] 

Dal url.py nel tuo sito principale:

urlpatterns = [ 
    url(r'^polls/', include('polls.urls')), 
    url(r'^admin/', admin.site.urls), 
] 

Nei tuoi sondaggi ci app è questo:

from django.apps import AppConfig 

La classe Config è nel file /apps.py, quindi il suo percorso tratteggiata è ' polls.apps.PollsConfig', il che significa che è necessario includere questo nella vostra urls.py principale, come ad esempio:

INSTALLED_APPS = [ 
    'polls.apps.PollsConfig', 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
] 

a questo punto suppongo che si sta per eseguire migrazioni.

0

Mentre ero alla ricerca su INSTALLED_APPS costante come te ho visto questa spiegazione sui documenti:

una lista di stringhe che designano tutte le applicazioni che sono abilitati in questa installazione Django. Ogni stringa deve essere un percorso Python tratteggiata:

  • una classe di configurazione dell'applicazione (preferito), o
  • un pacchetto contenente un'applicazione.

Il secondo punto sta spiegando che è possibile utilizzare la cartella dell'applicazione per risolvere automaticamente le impostazioni esistenti. La prima opzione può essere utilizzata anche per attivare la tua applicazione. Ma la cosa più importante è che è preferibile.

Se si vuole andare con quello preferito per il tuo prima devi creare app.py nella nuova cartella dell'applicazione quindi impostare in questo modo:

# my_new_app/apps.py 
from django.apps import AppConfig 

class MyNewAppConfig(AppConfig): 
    name = 'my_new_app' 
    verbose_name = "My Brand New Application" 

# my_new_app/__init__.py 
default_app_config = 'my_new_app.apps.MyNewAppConfig' 

Perché il primo è preferito? Perché penso che sia esplicito.

Problemi correlati