2010-12-15 80 views
0

Je rencontre des problèmes pour transmettre des valeurs d'objet de modèle via un modèle d'URL. L'URL:Django: Passer des valeurs d'objet de modèle à travers l'URL

url(r'^cities/(?P<city>\w+)/$', 'city_firm', name='city_firm'), 

Dans le modèle (à partir de la page d'index) J'ai:

<a href="{% url city_firm city %}">{{ city }}</a> 

Ceci est dans une boucle for.

La vue est connexe:

def city_firm(request, city): 
    city1 = Cities.objects.get(city=city) 
    cityf = city1.Firms.all() 
    return render_to_response('cityfirm.html', {'cityf': cityf}) 

Les deux modèles (Cities, Firms) sont en relation plusieurs à plusieurs. Je continue d'obtenir TemplateSyntaxError à l'index (NoReverseMatch while rendering: Reverse for 'city_firm' with arguments '(<Cities: >,)' and keyword arguments '{}' not found). Dans la balise de lien de modèle j'ai essayé: {% url city_firm city=city %}, {% url city_firm city=cities.city %}. Rien n'a changé. La partie urlconf semble correcte. Le problème semble être dans le modèle. Peut-être qu'il y a un problème avec les valeurs de chaîne de l'objet car elles ne sont pas en anglais. Mais j'ai pris plusieurs précautions pour éviter cela. Il y a peut-être quelque chose qui ne va pas avec la vue, mais l'erreur indique le modèle. Des idées?

Solution:
Merci à tous! Finalement, j'ai compris. Le problème était simple: j'essayais d'envoyer des noms d'attributs d'objets via l'URL, qui contenait des espaces et des caractères non-anglais. Pour le réparer, j'ai dû modifier mes modèles.

+0

essayer d'envoyer 'city.city' au lieu de' city' – Natim

+0

Si vous avez résolu votre problème, fournir comme une réponse et accepter –

Répondre

0

Je ne pense pas name signifie ce que vous pensez qu'elle - supprimer cela et lire ceci: http://docs.djangoproject.com/en/dev/topics/http/urls/#naming-url-patterns

En ce qui concerne l'erreur ... la NoReverseMatch vous dit qu'il est de ne pas voir aucun argument. Rappelez-vous que les variables de modèle non existantes se développent en "". Assurez-vous que city est en contexte lorsque vous exécutez ce code - peut-être poster le for dans le modèle?

2

Le problème est que vous ne pouvez pas passer un objet dans une URL, vous pouvez seulement passer des caractères. Vous devez donc placer la partie de l'objet city qui contient le texte que vous voulez inclure dans l'URL. Dans votre cas, il semble s'agir d'un attribut également appelé city, qui correspond à la recherche de l'objet dans la recherche. dans la vue. Il doit donc être:

<a href="{% url city_firm city.city %}">{{ city }}</a> 
+0

Malheureusement, il y a noway en effet de passer un objet si que l'URL résout les mots-clés attendus de cet objet. Je ne trouve aucune application faisant cela dans Django. – vinyll