IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Date en argument du tag url dans un template


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Par défaut Date en argument du tag url dans un template
    Bonjour à tous,

    Alors voilà, je découvre actuellement l'univers merveilleux de django. Pour cela, je m'essaye à la réalisation d'un blog. Il y a de nombreux tuto très bien fait à ce sujet.

    Le mécanisme de mon blog fonctionne parfaitement : je peux ajouter des articles côté back office et les visionner côté front office. Je dispose de plusieurs vues dont :
    • une listant les articles publiés ce jour
    • une listant les articles publiés ce mois
    • une listant les articles publiés cette année
    • une permettant de consulter un article spécifique dans le détail


    Bref, rien de bien original. Oui mais voilà, a présent sur ma page d'index, j'ai mis en place un bloc html donc l'objectif serait de permettre à l'utilisateur de naviguer parmis les trois premières vues citées ci dessus. Voici, à quoi ressemble ce bloc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <div id="sidebar-content">
            <a href='{% url blog_article_day "2009","08","21" %}'>{% trans "Today" %}</a><br/>
            <a href='{% url blog_article_month "2009","08" %}' >{% trans "This month" %}</a><br/>
            <a href='{% url blog_article_year "2009" %}'>{% trans "This year" %}</a><br/>
    </div>
    J'expérimente quelques difficultés pour renseigné l'attribut href de la balise <a> ; c'est à dire le lien vers mes vues. Comme vous pouvez le constater dans la portion de code ci dessus, les paramètres de dates à passer à ma vue sont actuellement en dur. Evidemment, ca fonctionne ainsi mais j'aimerais rendre le tout dynamique. Je n'arrive malheureusement pas à trouver un moyen pour récupérer la date courante et la passer en argument aux tags url de mon bloc.

    J'ai essayer la chose suivante, par exemple pour le lien vers la vue listant les articles d'une année :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <a href='{% url blog_article_year now "Y" %}'>{% trans "This year" %}</a>
     
    ou encore
     
    <a href='{% url blog_article_year year=(now "Y") %}'>{% trans "This year" %}</a>
    Mais, rien à faire, j'obtiens un joli message d'erreur... ce qui ne me surprend pas vraiment puisque les templates django ne sont pas conçus pour gérer la logique métier mais bel et bien afficher des données.

    Voilà, j'imagine qu'il s'agit là d'un problème trivial. Auriez vous une idée pour m'éclairer ?

  2. #2
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut
    Hello,

    Regarde de ce coté.

    Je ne sais pas si cela va t'aider mais je pense que ça peut te guider.
    Je crois quand réalité ce que tu veux faire c'est retourner la date courante et ensuite faire plusieurs affichages en filtrant la présentation (J M A, M A, A).

    @+
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  3. #3
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Par défaut
    Salut Jiyuu,

    D'abord merci énormément d'avoir pris le temps de me répondre.

    Ensuite, j'ai consulté ton lien mais je ne suis pas sûr de saisir ta suggestion.

    En fait, je souhaite simplement construire un bloc html contenant trois liens : un pour chacune des vues présentées dans mon premier post. D'ailleurs, à ce sujet, je me suis peut être mal expliqué précédemment :
    • Ma première vue a pour rôle de lister les articles publiés un jour donné
    • Ma deuxième vue a pour rôle de lister les articles publiés un mois donné
    • Ma troisième vue a pour rôle de lister les articles publiés une année donnée


    Le bloc html que je souhaite construire ne serait donc qu'un simple menu, proposant trois liens vers les trois vues précédentes, en utilisant la date courante. Autrement dit, j'aimerais que les liens prennent la forme suivante:
    • lien 1 : liste des articles publiés aujourd'hui
    • lien 2 : liste des articles publiés ce mois - ci
    • lien 3 : liste des articles publiés cette année


    Pour cela, il me faut transmettre dans l'url de mes liens, l'année et éventuellement le mois et éventuellement le jour de la date courante. C'est là toute ma problématique. J'ai bien essayé d'utiliser le tag now mais je ne parviens pas à l'utiliser avec un tag url.

    Pour le moment, j'ai trouvé une parade en construisant mes liens de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href='{% url blog_index %}{% now "Y/m/d" %}'> lien vers liste des articles publiés aujourd'hui</a>
    La vue blog_index est la vue racine de mon application blog. Toutes les urls des vues de mon application blog se déclinent à partir de l'url de cette vue racine. J'ai donc ici reconstitué plus ou moins manuellement l'url que je souhaitais obtenir en utilisant l'url racine de mon application blog, qui elle ne requiert aucun paramètre.

    Malheureusement, je ne peux me satisfaire d'une telle manière de procéder puisque je couple ici le mapping des urls de mes vues à mes templates... ça revient finalement presque à écrire l'url en dur.

    Voilà, j'espère ne pas avoir été trop ambigu et suis désolé si je n'ai pas saisi ta proposition alors qu'elle présentait une solution évidente. Quoiqu'il en soit, merci encore d'avoir pris le temps de me lire et de répondre.

    ++

  4. #4
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut
    Hello,

    En fait ce que je voulais dire c'est de faire ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <a href='{% now "j F Y"%}'>Recherche par jour</a>
    <a href='{% now "F Y"%}'>Recherche par mois</a>
    <a href='{% now "Y"%}'>Recherche par année</a>
    Les liens auront donc soit pour valeur J M A, soit M A soit A.
    Ensuite il ne te reste plus qu'à renseigner urls.py avec trois petites fonctions qui te renverront la date courante sous plusieurs formats puis de lier ceci à des fonctions de views.py qui traiteront ce qu'il y a à traiter.
    Normalement ça devrait marcher

    Enfin j'espère.
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  5. #5
    Membre Expert
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Par défaut
    Je ne vois que deux possibilités pour répondre à ton problème.

    1) -----------------------------------------------------------
    Soit tu fais une nouvelle vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def blog_current(type):
        # récupérer la date système
        if type == 'day':
            # appeller la méthode jour avec les paramètres de la date système
        if type == 'month':
            # idem pour le mois
        if type == 'year':
            # idem pour l'année
     
    urlpatterns = patterns('',
        url(r'blog/current/(?P<type>[\-\w]+)/$', blog_current, name="blog_current"),
    )
    et dans ton template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    {% url blog_current "day" %}
    {% url blog_current "month" %}
    {% url blog_current "year" %}
    2) -----------------------------------------------------------
    Soit tu ajoutes une variable qui contient la date du jour dans le contexte de la vue que tu affiches

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import datetime
    def ta_vue(request):
        d = datetime.date.today()
        return render_to_response('ta_vue.html', {'current_date' : d,}) # à adapter en fonction de la méthode que tu utilises pour afficher ta vue
    et dans ton template tu as du coup la variable current_date que tu peux exploiter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <div id="sidebar-content">
        <a href='{% url blog_article_day current_date.year,current_date.month,current_date.day %}'>{% trans "Today" %}</a><br/>
        ...
    </div>
    p.s.: Le code n'est pas testé, possible qu'il ce soit glissé des erreurs, mais le principe est là.

  6. #6
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Par défaut
    Salut et merci à tous les deux pour votre temps,

    Jyuu, je comprends mieux ta suggestion. Effectivement, c'est une solution tout à fait envisageable mais qui, à mon sens, se rapproche de ce que j'ai déjà mis en place : on couple ici en partie le mapping des urls aux templates (on ne respecte pas le dry concept ^^). Par exemple, si je modifie les patterns des urls associées à mes vues, mes templates ne fonctionnent plus.

    DelphiManiac, j'aime bien tes deux propositions. Je pense que je vais pencher pour la 2ème option. Pour l'instant, j'utilisais des vues génériques mais j'ai peut être la possibilité de conserver ces vues génériques et de passer la date courante en paramètre. Bon sinon, je créerai mes propres vues.

    Merci encore à tous les deux !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 18/02/2007, 15h37
  2. Afficher une image sans URL dans un forum
    Par Vanesse dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 01/03/2006, 17h55
  3. [FLASH MX] Variable URL dans un champ texte
    Par furet92 dans le forum Flash
    Réponses: 4
    Dernier message: 07/02/2005, 14h26
  4. Réponses: 3
    Dernier message: 29/12/2004, 17h10
  5. [jsp][jetty]recuperer l'url dans la barre d'adresse
    Par maxvador dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 07/06/2004, 14h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo