2009-09-09 10 views
1

J'essaie de mettre en place des liens vers une vue qui permet d'éditer des objets, dans la vue précédente. Modèle:Django Modèles absolue url - ce que je fais mal

class List(models.Model): 
user = models.ForeignKey(User) 
name = models.CharField(max_length=200) 
type = models.PositiveIntegerField(choices=TYPE_DICT) 

def __unicode__(self): 
    return self.name 

@models.permalink 
def get_absolute_url(self): 
    return ('EditList', None, {'list_id':self.id}) 

Vue:

lists = List.objects.filter(user=request.user) 
    array = [] 
    for list in lists: 
    ListDict = {'Name':list.name, 'type':types[str(list.type)], 'edit':list } 
    array.append(ListDict) 
    context = { 'array':array,} 

Modèle:

{% for dict in array %} 
     <tr> 
     {% for key,value in dict.items %} 
      {% ifequal key 'edit' %} 
       <td>{{ key }}</td><td><a href="{{ value.get_absolute_url }}">{{ value.name }}</a></td> 
      {% else %} 
       <td>{{ key }}:&nbsp;</td><td>{{ value }}</td> 
      {% endifequal %} 
     {% endfor %} 
     </tr> 
    {% endfor %} 

et urls: conf

urlpatterns = patterns('tst.list.views', 
(r'^$', 'list'), 
(r'^edit/(?P<list_id>\d+)/$', 'EditList') 

,

Qu'est-ce que cette ligne avec lien me donne est http://localhost/list/ comme url, non http://localhost/list/edit/[objectid]/

Quelqu'un peut-il s'il vous plaît me dire ce que je fais mal?

Alan

+0

Qu'est-ce que 'dict' dans le modèle? Vous passez une liste confusément appelée 'array' dans le contexte, mais je ne vois rien qui s'appelle' dict'. –

+0

Désolé. Il semble que j'ai oublié une partie du code. dict fait partie du tableau qui est mis en place dans la vue - ListDict –

+0

et Valeur est l'objet Liste –

Répondre

4

Si vous avait voulu le faire pour un URLconf sans nom, vous juste besoin de passer toute la chaîne d'importation:

@models.permalink 
def get_absolute_url(self): 
    return ('yourproject.yourapp.views.EditList', None, {'list_id':self.id}) 

Je vous suggère également suivre les PEP8 conventions de nommage pour les fonctions.

+0

Merci. En mentionnant pep8, vous suggérez qu'il devrait être edit_list pas EditList? –

+0

Ouais, exiger un bon codage standard est l'un de mes peeves :). Ceux qui se sont distingués: ListDict -> list_dict, espacement standard cohérent dans vos dicts et tuples, 4 indentation espacée (ou tabulée). – SmileyChris

0

Ok. Je l'ai fait fonctionner. Ce que je devais faire était de donner un nom à cette vue. Quand j'ai changé mon urlconf à ceci:

url(r'^edit/(?P<list_id>\d+)/$', 'EditList', name = 'EditList'), 

Puis tout a commencé à fonctionner.

Questions connexes