2010-03-17 4 views
4

Je suis en train de créer un lien hypertexte dynamique qui dépend d'une valeur passée d'une fonction:Créer un lien hypertexte dans le modèle de django d'objet qui a un espace

{% for item in field_list %} 
    <a href={% url index_view %}{{ item }}/> {{ item }} </a> <br> 
{% endfor %} 

Le problème est que l'un des éléments dans field_list est "Un joueur de hockey". Le lien pour une raison quelconque est tout laisser tomber après l'espace, il crée l'hyperlien sur l'ensemble du « joueur de hockey », mais l'adresse est

http://126.0.0.1:8000/Hockey 

Comment puis-je obtenir pour aller à

http://126.0.0.1:8000/Hockey Player/ 

à la place?

Répondre

6

Utilisez le filtre urlencode.

{{ item|urlencode }} 

Mais pourquoi prenez-vous le nom? Vous devriez passer la vue appropriée et PK ou slug à url qui créera une URL appropriée par elle-même.

+0

Django débutant ici. Pourriez-vous être plus précis? Je comprends ce que vous suggérez, mais je ne suis pas tout à fait là. . . –

+0

C'est juste comme disent les docs. Ecrivez une vue, mettez-la dans urlconf, et utilisez 'url'. http://docs.djangoproject.com/fr/dev/ref/templates/builtins/#url –

2

Depuis espaces sont illégaux dans les URL,

http://126.0.0.1:8000/Hockey Player/ 

est inacceptable. Le filtre urlencode remplacera simplement l'espace par% 20, ce qui est laid/inélégant, même s'il fait le travail. Une meilleure solution consiste à utiliser un champ "slug" sur votre modèle qui représente une version nettoyée du champ de titre (je suppose que cela s'appelle le champ de titre). Vous voulez finir avec une URL propre comme:

http://126.0.0.1:8000/hockey_player/ 

pour y arriver, utilisez quelque chose comme ceci dans votre modèle:

class Player(models.Model): 
    title = models.CharField(max_length=60) 
    slug = models.SlugField() 
    ... 

Si vous voulez que le champ slug à préchargés dans le l'administrateur, utilisez quelque chose comme ça dans votre admin.py:

class PlayerAdmin(admin.ModelAdmin): 
    prepopulated_fields = {"slug": ("title",)} 
.... 

admin.site.register(Player,PlayerAdmin) 

maintenant, quand vous entrez dans un nouveau joueur dans l'admin, si vous tapez « joueur de hockey » pour le titre, le champ Slug deviendra « hockey_player » automatiquement.

Dans le modèle que vous utiliserez alors:

{% for item in field_list %} 
    <a href={% url index_view %}{{ item.slug }}/> {{ item }} </a> <br> 
{% endfor %} 
Questions connexes