L’admin di Django DoesNotExist at / admin /

Ho alcuni problemi con l’amministratore di Django.

dopo syncdb, il risultato è:

Creating tables ... Installing custom SQL ... Installing indexes ... No fixtures found. 

Cosa significa questo?

Ad ogni modo, quando visito il pannello di amministrazione del sito web http://www.example.com/admin/ , ricevo questo messaggio:

 DoesNotExist at /admin/ Site matching query does not exist. 

setting.py contiene:

 INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', # Uncomment the next line to enable the admin: 'django.contrib.admin', ) 

ur.py contiene:

 from django.conf.urls.defaults import patterns, include, url # Uncomment the next two lines to enable the admin: from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', # Examples: # url(r'^$', 'rshd.views.home', name='home'), # url(r'^rshd/', include('rshd.foo.urls')), # Uncomment the admin/doc line below to enable admin documentation: url(r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin: url(r'^admin/', include(admin.site.urls)), ) 

Non hai davvero bisogno del framework dei sites se esegui solo un sito dal progetto, quindi la soluzione più semplice sarebbe rimuovere il seguente elemento dal tuo INSTALLED_APPS e l’errore dovrebbe andare via:

 'django.contrib.sites' 

È inoltre ansible ricreare l’object sito mancante dalla shell. Esegui python shell.py e poi:

 from django.contrib.sites.models import Site Site.objects.create(pk=1, domain='www.example.com', name='example.com') 

È ansible correggere questo errore se si utilizza django.contrib.sites senza rimuoverlo modificando SITE_ID = 1 valore nel file settings.py .

È successo a me quando ho cambiato il nome di dominio sul mio server, ho cancellato il vecchio nome di dominio da http://mynewdomainname.com/admin/sites/site/ manualmente, e il vecchio record di dominio nel database ha id = 1 , anche io aggiunto il nuovo nome di dominio mynewdomainname.com ed è id id = 2 , ho appena cambiato in SITE_ID = 2 e l’errore andato SITE_ID si riferisce all’attuale “pk” del nome di dominio attivo che usi come predefinito. Nel codice:

 >>> from django.contrib.sites.models import Site >>> # get_current() came from SiteManager class manager, >>> # see site-packages/django/contrib/sites/models.py >>> current_site = Site.objects.get_current() >>> print(current_site.pk) 2 >>> print(current_site.domain) 'http://mynewdomainname.com' 

questo succede dopo che settings.py cambiato

 SITE_ID = 2 

Fai attenzione all’ID di dominio corrente nell’app dei siti django .

Lo stesso problema mi è apparso improvvisamente, e tu sai che ci sono molte soluzioni. Tuttavia, qual è la ragione di questo improvviso problema?

Dopo aver esplorato a fondo, ho scoperto che il motivo è che abbiamo ignorato un passaggio nella prima azione di syncdb.

Quando hai il tuo primo syncdb, django ti chiederà di creare un account predefinito, se non inserisci in questo show interattivo, quell’object del sito non verrebbe creato automaticamente.

Quindi stai attento a questo. Sto usando django 1.3.1, non so se l’ultima versione ha risolto questo problema.

corretto il problema in un altro modo:

Uso PostgreSQL e Django 1.45 … quando ho rimosso il sito http://www.example.com e aggiunto un nuovo sito http://www.xxx.com, è stato aggiunto come ID = 2 perché PostgreSQL non torna nei numeri ID e login e logout I siti Django sono in qualche modo legati solo al sito ID = 1 nel tuo DB …

Sono andato al mio DB PostgreSQL e ho cambiato l’ID di http://www.xxx.com in 1 e poi sono riuscito a vedere di nuovo il login e il logout del sito 🙂

btw. [Sì, puoi semplicemente rimuovere django.contrib.sites dal tuo settings.py se non ne hai bisogno ^^ (ma non ho provato questo nel mio caso, con il problema del numero ID)]

spero che funzionerà per ulteriori utenti! 😉

Poiché i commenti sopra riportati sono piuttosto vecchi e il comando syncdb non esiste, e non voglio rimuovere django.contrib.sites , ecco cosa ha funzionato per me:

Incrementa SITE_ID . Avevo SITE_ID = 1 , cambiato in SITE_ID = 2 e tutto ha funzionato di nuovo.

Controlla il tuo task manager di Windows e assicurati che ci sia 1 nome di processo ‘python.exe’ in esecuzione. Se ce ne sono molti, cancellarli tutti, quindi riavviare il server. Questa soluzione funziona per me.