2017-07-26 1 views
1

Je suis face à cette erreur en python django:Je continue à obtenir l'erreur suivante dans django: "UnboundLocalError à/myapp /"

"UnboundLocalError à/myapp /" variable locale 'album' référencé avant la cession

J'ai créé une classe dans le fichier models.py et l'importation dans les vues, mais face à cette erreur

Voici le code complet des deux fichiers:

models.py

from django.db import models 

from django.db import models 

class album(models.Model): 
    artist = models.CharField(max_length=250) 
    title = models.CharField(max_length=500) 
    gender = models.CharField(max_length=100) 

    def __str__(self): 
     return self.artist+'--'+self.title 

views.py

from django.http import HttpResponse 
from .models import album 

def myapp(request): 
    all_albums = album.objects.all() 
    title = album.artist 
    html = '' 
    for album in all_albums: 
     url = '/myapp/' + str(album.id) + '/' 
     html += '<a href="' + url + '">' + title + '</a><br>' 
    return HttpResponse(html) 
+0

Vous utilisez la 'album' variables plusieurs fois. Une fois en tant que modèle, et d'autres fois en tant qu'instance. Les noms de modèles devraient idéalement être CamelCased. –

+0

Pouvez-vous s'il vous plaît expliquer comment écrire le code du modèle dans CamelCased? – habib

+0

Vous venez de changer 'album de classe (models.Model):' à 'class Album (models.Model):' comme décrit dans [ma réponse] (https://stackoverflow.com/questions/45320036/i-keep-getting -le-suivant-erreur-dans-django-unboundlocalerror-at-myapp # answer-45320209). Mais cela seul ne résoudra pas le problème. –

Répondre

0

copie ce totalement et coller dans votre vue

from django.http import HttpResponse 
from .models import album 

def myapp(request): 
    all_albums = album.objects.all() 
    html = '' 
    for al in all_albums: 
     url = '/myapp/' + str(al.id) + '/' 
     html += '<a href="' + url + '">' + al.artist + '</a><br>' 
    return HttpResponse(html) 
+0

merci! problème résolu – habib

1

changer la vue comme celui-ci,

def myapp(request): 
    all_albums = album.objects.all() 
    html = '' 
    for album in all_albums: 
     url = '/myapp/' + str(album.id) + '/' 
     html += '<a href="' + url + '">' + album.artist + '</a><br>' 
    return HttpResponse(html) 
2

titre Déplacer dans la boucle et un meilleur nom de la variable de boucle d'utilisation non comme modèle

html = '' 
for album_data in all_albums: 
    url = '/myapp/' + str(album_data.id) + '/' 
    title = album_data.artist 
    html += '<a href="' + url + '">' + title + '</a><br>' 
return HttpResponse(html) 
+0

J'ai déplacé le titre dans la boucle mais donne toujours l'erreur – habib

+0

La même erreur? si ce n'est pas le cas, et peut-être le montrer bien le nouveau code –

0

Vous utilisez le nom album pour plusieurs variables, une fois en tant que modèle et d'autres fois en tant qu'instance. Les noms de modèles devraient idéalement être CamelCased. Après avoir corrigé le nom du modèle, déplacez l'affectation de variable title dans la boucle for. Ne le faire que pour résoudre le problème pour l'instant, mais si vous respectez les consignes de style (PEP-8), vous ne serez pas confronté à de tels problèmes à l'avenir.

models.py

... 
class Album(models.Model): 
    artist = models.CharField(max_length=250) 
... 

views.py

... 
from .models import Album 

def myapp(request): 
    all_albums = Album.objects.all() 
    html = '' 
    for album in all_albums: 
     title = album.artist 
     url = '/myapp/' + str(album.id) + '/' 
     html += '<a href="' + url + '">' + title + '</a><br>' 
... 
+0

ne fonctionne toujours pas – habib

+0

@habib Vous devez ensuite publier une pile complète. De même, si vous avez mis à jour votre code avec les modifications suggérées, modifiez votre question pour ajouter le code mis à jour. –