document.write('<link rel="stylesheet" href="http://gist.github.com/stylesheets/gist/embed.css"/>')





document.write('<div id=\"gist-54472\" class=\"gist\">\n  \n  \n    \n            \n\n      <div class=\"gist-file\">\n        <div class=\"gist-data gist-syntax\">\n          \n          \n          \n            <div class=\"gist-highlight\"><pre><div class=\"line\" id=\"LC1\"><span class=\"kn\">from<\/span> <span class=\"nn\">django<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">template<\/span> <span class=\"c\"># to handle templates variables and context<\/span><\/div><div class=\"line\" id=\"LC2\"><span class=\"n\">register<\/span> <span class=\"o\">=<\/span> <span class=\"n\">template<\/span><span class=\"o\">.<\/span><span class=\"n\">Library<\/span><span class=\"p\">()<\/span> <span class=\"c\"># register our template tags to be able to use them in our templates<\/span><\/div><div class=\"line\" id=\"LC3\">&nbsp;<\/div><div class=\"line\" id=\"LC4\"><span class=\"kn\">from<\/span> <span class=\"nn\">events<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">models<\/span> <span class=\"c\"># to get the models of our app<\/span><\/div><div class=\"line\" id=\"LC5\">&nbsp;<\/div><div class=\"line\" id=\"LC6\"><span class=\"k\">class<\/span> <span class=\"nc\">EventMetadataListNode<\/span><span class=\"p\">(<\/span><span class=\"n\">template<\/span><span class=\"o\">.<\/span><span class=\"n\">Node<\/span><span class=\"p\">):<\/span><\/div><div class=\"line\" id=\"LC7\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">def<\/span> <span class=\"nf\">__init__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">event_pk<\/span><span class=\"p\">,<\/span> <span class=\"n\">context_var<\/span><span class=\"p\">):<\/span><\/div><div class=\"line\" id=\"LC8\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">context_var<\/span> <span class=\"o\">=<\/span> <span class=\"n\">context_var<\/span> <span class=\"c\"># new var we are going to create<\/span><\/div><div class=\"line\" id=\"LC9\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">event_pk<\/span> <span class=\"o\">=<\/span> <span class=\"n\">template<\/span><span class=\"o\">.<\/span><span class=\"n\">Variable<\/span><span class=\"p\">(<\/span><span class=\"n\">event_pk<\/span><span class=\"p\">)<\/span> <span class=\"c\"># the pk, get from the template &quot;context&quot; as a variable<\/span><\/div><div class=\"line\" id=\"LC10\">&nbsp;<\/div><div class=\"line\" id=\"LC11\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">def<\/span> <span class=\"nf\">render<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">context<\/span><span class=\"p\">):<\/span><\/div><div class=\"line\" id=\"LC12\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c\"># here we create a new context variable named from self.context_var and assign to it the result set<\/span><\/div><div class=\"line\" id=\"LC13\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c\"># see the use of &quot;resolve&quot; that will get us the var from the context<\/span><\/div><div class=\"line\" id=\"LC14\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">context<\/span><span class=\"p\">[<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">context_var<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"n\">models<\/span><span class=\"o\">.<\/span><span class=\"n\">EventMetadata<\/span><span class=\"o\">.<\/span><span class=\"n\">objects<\/span><span class=\"o\">.<\/span><span class=\"n\">filter<\/span><span class=\"p\">(<\/span><span class=\"n\">event__pk<\/span><span class=\"o\">=<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">event_pk<\/span><span class=\"o\">.<\/span><span class=\"n\">resolve<\/span><span class=\"p\">(<\/span><span class=\"n\">context<\/span><span class=\"p\">))<\/span><\/div><div class=\"line\" id=\"LC15\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">return<\/span> <span class=\"s\">&#39;&#39;<\/span><\/div><div class=\"line\" id=\"LC16\">&nbsp;<\/div><div class=\"line\" id=\"LC17\"><span class=\"k\">def<\/span> <span class=\"nf\">do_get_event_metadata<\/span><span class=\"p\">(<\/span><span class=\"n\">parser<\/span><span class=\"p\">,<\/span> <span class=\"n\">token<\/span><span class=\"p\">):<\/span><\/div><div class=\"line\" id=\"LC18\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sd\">&quot;&quot;&quot;<\/span><\/div><div class=\"line\" id=\"LC19\"><span class=\"sd\">    get the event metadata<\/span><\/div><div class=\"line\" id=\"LC20\">&nbsp;<\/div><div class=\"line\" id=\"LC21\"><span class=\"sd\">    Example::<\/span><\/div><div class=\"line\" id=\"LC22\"><span class=\"sd\">        {% get_event_metadata event.pk as metadatas %}<\/span><\/div><div class=\"line\" id=\"LC23\"><span class=\"sd\">    &quot;&quot;&quot;<\/span><\/div><div class=\"line\" id=\"LC24\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c\"># split the args string, it detects &quot;quoted parameters&quot; and doesn&#39;t stop on spaces<\/span><\/div><div class=\"line\" id=\"LC25\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"n\">bits<\/span> <span class=\"o\">=<\/span> <span class=\"n\">token<\/span><span class=\"o\">.<\/span><span class=\"n\">split_contents<\/span><span class=\"p\">()<\/span><\/div><div class=\"line\" id=\"LC26\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">if<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">bits<\/span><span class=\"p\">)<\/span> <span class=\"o\">!=<\/span> <span class=\"mi\">4<\/span><span class=\"p\">:<\/span> <span class=\"c\"># we check if we passed the right number of args<\/span><\/div><div class=\"line\" id=\"LC27\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">raise<\/span> <span class=\"n\">template<\/span><span class=\"o\">.<\/span><span class=\"n\">TemplateSyntaxError<\/span><span class=\"p\">(<\/span><span class=\"n\">_<\/span><span class=\"p\">(<\/span><span class=\"s\">&#39;<\/span><span class=\"si\">%s<\/span><span class=\"s\"> tag requires exactly 1 argument, and a variable&#39;<\/span><span class=\"p\">)<\/span> <span class=\"o\">%<\/span> <span class=\"n\">bits<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">])<\/span><\/div><div class=\"line\" id=\"LC28\">&nbsp;<\/div><div class=\"line\" id=\"LC29\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">return<\/span> <span class=\"n\">EventMetadataListNode<\/span><span class=\"p\">(<\/span><span class=\"n\">bits<\/span><span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">],<\/span> <span class=\"n\">bits<\/span><span class=\"p\">[<\/span><span class=\"mi\">3<\/span><span class=\"p\">])<\/span> <span class=\"c\"># bits[1] == events.pk, bits[3] == variable<\/span><\/div><div class=\"line\" id=\"LC30\">&nbsp;<\/div><div class=\"line\" id=\"LC31\"><span class=\"c\"># finally we register the new template tag<\/span><\/div><div class=\"line\" id=\"LC32\"><span class=\"c\"># first parameter is the name in the template the second one is the name in the source file<\/span><\/div><div class=\"line\" id=\"LC33\"><span class=\"n\">register<\/span><span class=\"o\">.<\/span><span class=\"n\">tag<\/span><span class=\"p\">(<\/span><span class=\"s\">&#39;get_event_metadata&#39;<\/span><span class=\"p\">,<\/span> <span class=\"n\">do_get_event_metadata<\/span><span class=\"p\">)<\/span><\/div><\/pre><\/div>\n          \n        <\/div>\n\n        <div class=\"gist-meta\">\n          <a href=\"http://gist.github.com/raw/54472/2e45685725945e7d765a6600b6164ff675afcd88/gistfile1.py\" style=\"float:right;\">view raw<\/a>\n          <a href=\"http://gist.github.com/54472#file_gistfile1.py\" style=\"float:right;margin-right:10px;color:#666\">gistfile1.py<\/a>\n          <a href=\"http://gist.github.com/54472\">This Gist<\/a> brought to you by <a href=\"http://github.com\">GitHub<\/a>.\n        <\/div>\n      <\/div>\n    \n  \n<\/div>\n')
