70 votes

Site correspondant à la requête n'existe pas

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

J'ai cherché partout et la seule solution que j'ai trouvée concerne la configuration du framework du site, SITE_ID, etc. Je pense que ces éléments sur mon ordinateur sont bons, mais je ne trouve pas de guide pour m'aider à les vérifier.

Quel est le problème et comment peut-il être corrigé?

 DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Ajoutez 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' ou 'oracle'.
        'NAME': '/home/dotcloud/nhs.db',                      # Ou chemin vers le fichier de base de données si vous utilisez sqlite3.
        'USER': '',                      # Non utilisé avec sqlite3.
        'PASSWORD': '',                  # Non utilisé avec sqlite3.
        'HOST': '',                      # Défini sur une chaîne vide pour localhost. Non utilisé avec sqlite3.
        'PORT': '',                      # Défini sur une chaîne vide pour par défaut. Non utilisé avec sqlite3.
    }
}

0 votes

Êtes-vous en mesure de vous connecter au site admin ? Il semble que votre table django_site soit vide. Vous avez besoin d'au moins une entrée là-bas

0 votes

Non, je ne peux pas me connecter au site admin. Il me donne la même erreur à /admin/

169voto

jdi Points 38029

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

À partir 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)

Maintenant, définissez cet ID de site dans votre settings.py en tant que SITE_ID

0 votes

Je n'arrive pas à faire fonctionner la console python manage.py. Il me renvoie cette erreur : python: can't open file 'manage.py'

0 votes

J'ai supprimé le premier projet de la configuration et j'ai obtenu l'application de l'ancien propriétaire (l'administrateur du site change chaque année pour cela).

0 votes

Eh bien, cela semble être un problème plus important que simplement manquer une entrée de base de données. Si vous ne pouvez même pas exécuter manage.py, alors vous ne pouvez même pas démarrer le serveur de développement pour tester localement. Êtes-vous sûr que vous exécutez ceci à l'emplacement du projet qui contient réellement le script manage.py?

36voto

michael_arshynov Points 106

La table django_site doit contenir une ligne avec la même valeur que id (par défaut égal à 1), car SITE_ID est défini sur cette valeur (à l'intérieur de votre fichier settings.py).

1 votes

Génial Merci Frère

11voto

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

0 votes

Vous devriez expliquer plus en détail, y compris pourquoi

0 votes

Non, dans mon cas c'est le contraire, en supprimant SITE_ID = 1 de la config cela a fonctionné. Qu'est-ce qui se passe ?

0 votes

Littéralement, j'ai passé toute la journée à essayer de résoudre cela, réinstaller des trucs, jouer avec les migrations, et ainsi de suite... finalement mettre ceci 1 a tout résolu.... les mises à jour sont parfois un cauchemar

8voto

Aniket Thakur Points 10135

Je vois des réponses pour créer un nouveau site et une référence id pour cela. Mais si vous avez déjà un site ou si vous avez d'une manière ou d'une autre supprimé et recréé le site à partir de l'interface utilisateur, l'id continue d'augmenter. Pour résoudre ce problème, vous pouvez obtenir l'id comme suit:

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

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

SITE_ID = 8

En gros, l'ID dans la table correspondant à votre site et dans le settings.py doivent correspondre.

5voto

Renato Espinoza Points 41

J'ai réparé cela 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 cela 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'ID de votre site, alors allez dans la base de données réelle, j'ai téléchargé sqliteman pour voir ce que contenait ma table. Donc quel que soit l'ID de site que vous avez dans la table est celui qui est assigné à SITE_ID

Cela est dû au fait qu'il y a une fonction get_current qui recherche SITE_ID et ne le trouve pas dans votre settings.py

tables
-django_site
--Colonnes
---id

il devrait avoir l'ID comme 1, le nom comme example.com, le domaine comme example.com

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X