web-dev-qa-db-fra.com

La requête de correspondance de site n'existe pas

Python noob, comme il s’agit de mon premier projet, excusez donc mon manque de familiarité.

Le site fonctionnait très bien jusqu'à ce que je clique sur "Déconnexion" sur mon application. Après cela, le site Web me donnerait cette erreur: DoesNotExist at /login/Site, la requête de correspondance n'existe pas.

J'ai cherché partout et la seule solution que je reçois concerne la configuration de la structure de site, SITE_ID, etc. Je pense que les éléments de mon ordinateur fonctionnent correctement, mais je ne trouve pas de guide pas à pas pour m'aider à les vérifier.

Quelqu'un peut-il me dire quel est le problème et comment le résoudre? Merci d'avance: 3

DATABASES = {
'default': {
    'ENGINE': 'Django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'Oracle'.
    'NAME': '/home/dotcloud/nhs.db',                      # Or path to database file if using sqlite3.
    'USER': '',                      # Not used with sqlite3.
    'PASSWORD': '',                  # Not used with sqlite3.
    'Host': '',                      # Set to empty string for localhost. Not used with sqlite3.
    'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
}

}

57
user1576866

Si vous n'avez pas de site défini dans votre base de données et que Django souhaite le référencer, vous devrez en créer un. 

D'un python manage.py Shell:

from Django.contrib.sites.models import Site
new_site = Site.objects.create(domain='foo.com', name='foo.com')
print (new_site.id)

Définissez maintenant cet ID de site dans votre fichier settings.py sur SITE_ID.

138
jdi

La table Django_site doit contenir une ligne avec la même valeur que id (par défaut égale à 1), car SITE_ID est défini sur (dans votre settings.py).

26
michael_arshynov

Je l'ai corrigé sans utiliser python manage.py Shell

Au début, j'ai essayé d'utiliser les commandes ci-dessus en utilisant manage.py Shell:

from Django.contrib.sites.models import Site
new_site = Site.objects.create(domain='foo.com', name='foo.com')
print new_site.id

Mais il a donné une erreur d’intégrité

La réponse courte est d'ajouter SITE_ID = 1 à votre settings.py Si vous voulez savoir quel est l'identifiant de votre site, allez dans la base de données actuelle, j'ai téléchargé sqliteman pour voir ce que ma table avait. Donc, quel que soit l'identifiant de site que vous avez dans la table est ce qui est assigné à SITE_ID

En effet, il existe une fonction get_current qui recherche SITE_ID et qui ne la trouve pas dans votre settings.py

tables
-Django_site
--Columns
---id

il doit avoir l'ID 1, le nom exemple.com, le domaine exemple.com

J'espère que c'est une bonne réponse et aide

2
Renato Espinoza

Je vois des réponses pour créer un nouveau site et un identifiant de référence pour cela. Mais si vous avez déjà un site ou si vous avez supprimé et créé de nouveau le site à partir de l'interface utilisateur, l'identifiant continue de s'incrémenter. Pour résoudre ce problème, vous pouvez obtenir l’identifiant comme suit:

Pour obtenir l'ID, vous pouvez faire -

python manage.py  Shell
from Django.contrib.sites.models import Site
print Site.objects.get(name='example.com').id

Obtenez l'identifiant que vous obtenez ici dans setting.py. Par exemple.

SITE_ID = 8

Fondamentalement, l'ID dans la table correspondant au site de tournée et dans le fichier settings.py doit correspondre.

1
Aniket Thakur

Ajoutez SITE_ID = 1 à settings.py dans votre projet Django

0
Goodness Ezeokafor

 enter image description here 

Interrogez l'ID dans les tables Django_site de votre base de données et définissez le bon dans votre fichier Django settings.py, par exemple: SITE_ID = 3

0
Freman Zhang