def list_committees(parser, token): """ Example:: {% list_committees as committees_list [user=user limit=3 tags=bloop bleep q=searchterm] %} {% for committee in committees %} {{ committee.something }} {% endfor %} """ args, kwargs = [], {} bits = token.split_contents() context_var = bits[2] if len(bits) < 3: message = "'%s' tag requires more than 2" % bits[0] raise TemplateSyntaxError(message) if bits[1] != "as": message = "'%s' second argument must be 'as'" % bits[0] raise TemplateSyntaxError(message) kwargs = parse_tag_kwargs(bits) if 'order' not in kwargs: kwargs['order'] = '-create_dt' return ListCommitteesNode(context_var, *args, **kwargs)
def list_projects(parser, token): """ Example: {% list_projects as projects_list [user=user limit=3 tags=bloop bleep q=searchterm] %} {% for project in projects %} {{ project.something }} {% endfor %} """ args, kwargs = [], {} bits = token.split_contents() context_var = bits[2] if len(bits) < 3: message = "'%s' tag requires more than 2" % bits[0] raise TemplateSyntaxError(message) if bits[1] != "as": message = "'%s' second argument must be 'as'" % bits[0] raise TemplateSyntaxError(message) kwargs = parse_tag_kwargs(bits) if 'order' not in kwargs: kwargs['order'] = '-create_dt' return ListProjectsNode(context_var, *args, **kwargs)
def list_helpfiles(parser, token): """ Used to pull a list of :model:`help_files.HelpFile` items. Usage:: {% list_help_files as [varname] [options] %} Be sure the [varname] has a specific name like ``help_files_sidebar`` or ``help_files_list``. Options can be used as [option]=[value]. Wrap text values in quotes like ``tags="cool"``. Options include: ``limit`` The number of items that are shown. **Default: 3** ``order`` The order of the items. **Default: Latest Created** ``user`` Specify a user to only show public items to all. **Default: Viewing user** ``query`` The text to search for items. Will not affect order. ``tags`` The tags required on items to be included. ``random`` Use this with a value of true to randomize the items included. ``filters`` Use only single quotes for text where needed. These will be placed inside Q() tags. Use &, |, and commas to separate values. Only one operator is allowed per comma separated group. Each comma separated group will be applied in a single statement. If more is required a custom function should be made. ex: {% list_helpfiles as help_files_list filters="is_faq=True&is_featured=True" %} Example:: {% list_helpfiles as help_files_list limit=5 tags="cool" %} {% for help_file in help_files_list %} {{ help_file.question }} {% endfor %} """ args, kwargs = [], {} bits = token.split_contents() context_var = bits[2] if len(bits) < 3: message = "'%s' tag requires more than 3" % bits[0] raise TemplateSyntaxError(_(message)) if bits[1] != "as": message = "'%s' second argument must be 'as" % bits[0] raise TemplateSyntaxError(_(message)) kwargs = parse_tag_kwargs(bits) if 'order' not in kwargs: kwargs['order'] = '-create_dt' return ListHelpFilesNode(context_var, *args, **kwargs)
def list_events(parser, token): """ Used to pull a list of :model:`events.Event` items. Usage:: {% list_events as [varname] [options] %} Be sure the [varname] has a specific name like ``events_sidebar`` or ``events_list``. Options can be used as [option]=[value]. Wrap text values in quotes like ``tags="cool"``. Options include: ``limit`` The number of items that are shown. **Default: 3** ``order`` The order of the items. Custom options include ``next_upcoming`` for the events starting after now, and ``current_and_upcoming`` for events going on as well as upcoming. **Default: Next Upcoming by date** ``user`` Specify a user to only show public items to all. **Default: Viewing user** ``type`` The type of the event. ``tags`` The tags required on items to be included. ``group`` The group id associated with items to be included. ``random`` Use this with a value of true to randomize the items included. ``start_dt`` Specify the date that events should start after to be shown. MUST be in the format 1/20/2013-06:45 Example:: {% list_events as events_list limit=5 tags="cool" %} {% for event in events_list %} {{ event.title }} {% endfor %} """ args, kwargs = [], {} bits = token.split_contents() context_var = bits[2] if len(bits) < 3: message = "'%s' tag requires more than 3" % bits[0] raise TemplateSyntaxError(_(message)) if bits[1] != "as": message = "'%s' second argument must be 'as" % bits[0] raise TemplateSyntaxError(_(message)) kwargs = parse_tag_kwargs(bits) if 'order' not in kwargs: kwargs['order'] = 'next_upcoming' return ListEventsNode(context_var, *args, **kwargs)
def list_forum_categories(parser, token): """ Used to pull a list of :model:`forums.Category` items. Usage:: {% list_forum_categories as [varname] [options] %} Be sure the [varname] has a specific name like ``forums_sidebar`` or ``forum_categories_list``. Options can be used as [option]=[value]. Wrap text values in quotes like ``tags="cool"``. Options include: ``limit`` The number of items that are shown. **Default: 3** ``order`` The order of the items. **Default: name** ``user`` Specify a user to only show public items to all. **Default: Viewing user** ``query`` The text to search for items. Will not affect order. ``random`` Use this with a value of true to randomize the items included. Example:: {% list_forum_categories as forum_categories_list limit=5 %} <ul> {% for cat in forum_categories_list %} {% with cat.forums.count as c %} <li><a href="{% url 'pybb:category' cat.slug %}">{{ cat.name }}</a> - {{ c }} forum{{ c|pluralize }}</li> {% endwith %} {% endfor %} </ul> """ args, kwargs = [], {} bits = token.split_contents() context_var = bits[2] if len(bits) < 3: message = "'%s' tag requires more than 3" % bits[0] raise TemplateSyntaxError(_(message)) if bits[1] != "as": message = "'%s' second argument must be 'as" % bits[0] raise TemplateSyntaxError(_(message)) kwargs = parse_tag_kwargs(bits) if 'order' not in kwargs: kwargs['order'] = 'name' return ListForumCategoriesNode(context_var, *args, **kwargs)
def list_boxes(parser, token): """ Used to pull a list of :model:`boxes.Box` items. Usage:: {% list_boxes as [varname] [options] %} Be sure the [varname] has a specific name like ``boxes_sidebar`` or ``boxes_list``. Options can be used as [option]=[value]. Wrap text values in quotes like ``tags="cool"``. Options include: ``limit`` The number of items that are shown. **Default: 3** ``order`` The order of the items. **Default: Newest First** ``user`` Specify a user to only show public items to all. **Default: Viewing user** ``query`` The text to search for items. Will not affect order. ``tags`` The tags required on items to be included. ``random`` Use this with a value of true to randomize the items included. Example:: {% list_boxes as boxes_list limit=5 tags="cool" %} {% for box in boxes_list %} <div class="boxes">{{ box.safe_content }} {% include 'boxes/edit-link.html' %}</div> {% endfor %} """ args, kwargs = [], {} bits = token.split_contents() if len(bits) < 3: message = "'%s' tag requires more than 2" % bits[0] raise TemplateSyntaxError(_(message)) if bits[1] != "as": message = "'%s' second argument must be 'as'" % bits[0] raise TemplateSyntaxError(_(message)) context_var = bits[2] kwargs = parse_tag_kwargs(bits) if 'order' not in kwargs: kwargs['order'] = '-create_dt' return ListBoxesNode(context_var, *args, **kwargs)
def list_photos(parser, token): """ Used to pull a list of :model:`photos.Image` items. Usage:: {% list_photos as [varname] [options] %} Be sure the [varname] has a specific name like ``photos_sidebar`` or ``photos_list``. Options can be used as [option]=[value]. Wrap text values in quotes like ``tags="cool"``. Options include: ``limit`` The number of items that are shown. **Default: 3** ``order`` The order of the items. **Default: Newest Added** ``user`` Specify a user to only show public items to all. **Default: Viewing user** ``query`` The text to search for items. Will not affect order. ``tags`` The tags required on items to be included. ``group`` The group id associated with items to be included. ``random`` Use this with a value of true to randomize the items included. Example:: {% list_photos as photos_list limit=5 tags="cool" %} {% for photo in photos_list %} {{ photo.title }} {% endfor %} """ args, kwargs = [], {} bits = token.split_contents() context_var = bits[2] if len(bits) < 3: message = "'%s' tag requires more than 3" % bits[0] raise TemplateSyntaxError(_(message)) if bits[1] != "as": message = "'%s' second argument must be 'as" % bits[0] raise TemplateSyntaxError(_(message)) kwargs = parse_tag_kwargs(bits) if 'order' not in kwargs: kwargs['order'] = '-create_dt' return ListPhotosNode(context_var, *args, **kwargs)
def list_news(parser, token): """ Used to pull a list of :model:`news.News` items. Usage:: {% list_news as [varname] [options] %} Be sure the [varname] has a specific name like ``news_sidebar`` or ``news_list``. Options can be used as [option]=[value]. Wrap text values in quotes like ``tags="cool"``. Options include: ``limit`` The number of items that are shown. **Default: 3** ``order`` The order of the items. **Default: Latest Release Date** ``user`` Specify a user to only show public items to all. **Default: Viewing user** ``query`` The text to search for items. Will not affect order. ``tags`` The tags required on items to be included. ``random`` Use this with a value of true to randomize the items included. Example:: {% list_news as news_list limit=5 tags="cool" %} {% for news_item in news_list %} {{ news_item.headline }} {% endfor %} """ args, kwargs = [], {} bits = token.split_contents() context_var = bits[2] if len(bits) < 3: message = "'%s' tag requires more than 3" % bits[0] raise TemplateSyntaxError(_(message)) if bits[1] != "as": message = "'%s' second argument must be 'as" % bits[0] raise TemplateSyntaxError(_(message)) kwargs = parse_tag_kwargs(bits) if "order" not in kwargs: kwargs["order"] = "-release_dt" return ListNewsNode(context_var, *args, **kwargs)
def list_navs(parser, token): """ Used to pull a list of :model:`navs.Nav` items. Usage:: {% list_case_studies as [varname] [options] %} Be sure the [varname] has a specific name like ``case_studies_sidebar`` or ``case_studies_list``. Options can be used as [option]=[value]. Wrap text values in quotes like ``tags="cool"``. Options include: ``limit`` The number of items that are shown. **Default: 3** ``order`` The order of the items. **Default: ID** ``user`` Specify a user to only show public items to all. **Default: Viewing user** ``query`` The text to search for items. Will not affect order. ``tags`` The tags required on items to be included. ``random`` Use this with a value of true to randomize the items included. Example:: {% list_navs as nav_list limit=5 tags="cool" %} {% for nav in nav_list %} {% nav nav %} {% endfor %} """ args, kwargs = [], {} bits = token.split_contents() context_var = bits[2] if len(bits) < 3: message = "'%s' tag requires at least 2 parameters" % bits[0] raise TemplateSyntaxError(_(message)) if bits[1] != "as": message = "'%s' second argument must be 'as'" % bits[0] raise TemplateSyntaxError(_(message)) kwargs = parse_tag_kwargs(bits) if 'order' not in kwargs: kwargs['order'] = 'pk' return ListNavNode(context_var, *args, **kwargs)
def list_corporate_memberships(parser, token): """ Used to pull a list of :model:`corporate_memberships.CorpMembership` items. Usage:: {% list_corporate_memberships as [varname] [options] %} Be sure the [varname] has a specific name like ``corpmembership_sidebar`` or ``corpmembership_list``. Options can be used as [option]=[value]. Wrap text values in quotes like ``query="cool"``. Options include: ``limit`` The number of items that are shown. **Default: 3** ``order`` The order of the items. **Default: Newest Approved** ``user`` Specify a user to only show public items to all. **Default: Viewing user** ``query`` The text to search for items. Will not affect order. ``random`` Use this with a value of true to randomize the items included. Example:: {% list_corporate_memberships as corpmembership_list limit=5 corporate_membership_type=1 %} {% for corpmembership in corpmembership_list %} {{ corpmembership.corp_profile.name }} {% endfor %} """ args, kwargs = [], {} bits = token.split_contents() context_var = bits[2] if len(bits) < 3: message = "'%s' tag requires at least 2 parameters" % bits[0] raise TemplateSyntaxError(_(message)) if bits[1] != "as": message = "'%s' second argument must be 'as'" % bits[0] raise TemplateSyntaxError(_(message)) kwargs = parse_tag_kwargs(bits) if 'order' not in kwargs: kwargs['order'] = '-join_dt' return ListCorpMembershipNode(context_var, *args, **kwargs)
def get_rss(parser, token): """ Take an RSS feed so you can iterate through the entries. Usage:: {% get_rss [rss_feed_url] as [variable] cache=600 %} Options include: ``cache`` The length of time to cache the feed in seconds. **Default: 300** Example:: {% get_rss "http://www.freesound.org/blog/?feed=rss2" as rss %} {% for entry in rss.entries %} <h1>{{entry.title}}</h1> <p> {{entry.summary|safe}} </p> <p> <a href="{{entry.link}}">read more...</a> </p> {% endfor %} """ args, kwargs = [], {} bits = token.split_contents() url_string = bits[1] context_var = bits[3] if len(bits) < 4: message = "'%s' tag requires more than 3" % bits[0] raise TemplateSyntaxError(_(message)) if bits[2] != "as": message = "'%s' third argument must be 'as" % bits[0] raise TemplateSyntaxError(_(message)) kwargs = parse_tag_kwargs(bits) if url_string[0] == url_string[-1] and url_string[0] in ('"', "'"): url = url_string[1:-1] else: url = url_string return RssParserNode(context_var, url, *args, **kwargs)
def related_videos(parser, token): """ Used to pull a list of related videos for a given video. Usage:: {% related_videos video as [varname] [options] %} Be sure the [varname] has a specific name like ``videos_sidebar`` or ``videos_list``. Options can be used as [option]=[value]. ``limit`` The number of items that are shown. **Default: 3** ``order`` The order of the items. **Default: Newest Added** Example:: {% related_videos video as related_list %} {% for vid in related_list %} {{ vid.title }} {% endfor %} """ args, kwargs = [], {} bits = token.split_contents() video = bits[1] context_var = bits[3] if len(bits) < 4: message = "'%s' tag requires more than 3 arguments" % bits[0] raise TemplateSyntaxError(message) if bits[2] != "as": message = "'%s' third argument must be 'as'" % bits[0] raise TemplateSyntaxError(message) kwargs = parse_tag_kwargs(bits) if 'order' not in kwargs: kwargs['order'] = '-create_dt' return RelatedListNode(video, context_var, *args, **kwargs)
def list_jobs_categories(parser, token): """ Used to pull a list of jobs categories with the number of jobs per category. Usage:: {% list_jobs_categories as [varname] [options] %} Options include: ``user`` Specify a user to only show public items to all. **Default: Viewing user** Example:: {% list_jobs_categories as jobs_cats_list user=request.user %} {% if jobs_cats_list %} <ul> {% for cat in jobs_cats_list %} <li> <a href="{% url 'jobs' %}?cat={{ cat.cat__id }}">{{ cat.cat__name }} ({{ cat.total }})</a> </li> {% endfor %} </ul> {% endif %} """ args, kwargs = [], {} bits = token.split_contents() context_var = bits[2] if len(bits) < 3: message = "'%s' tag requires at least 2 parameters" % bits[0] raise TemplateSyntaxError(_(message)) if bits[1] != "as": message = "'%s' second argument must be 'as'" % bits[0] raise TemplateSyntaxError(_(message)) kwargs = parse_tag_kwargs(bits) return ListJobCategoriesNode(context_var, *args, **kwargs)
def get_rss(parser, token): """ Take an RSS feed so you can iterate through the entries. Usage:: {% get_rss [rss_feed_url] as [variable] cache=600 %} Options include: ``cache`` The length of time to cache the feed in seconds. **Default: 300** Example 1:: {% get_rss "http://www.freesound.org/blog/?feed=rss2" as rss %} {% for entry in rss.entries %} <h1>{{entry.title}}</h1> <p> {{entry.summary|safe}} </p> <p> <a href="{{entry.link}}">read more...</a> </p> {% endfor %} Example 2:: {% get_rss "http://rss.nytimes.com/services/xml/rss/nyt/PersonalTech.xml" as rss %} {% if rss.feed.image %} <img src="{{ rss.feed.image.href }}" alt="" /> {% endif %} {% for entry in rss.entries %} <div class="row entry-item"> <div class="col-xs-4 col-md-3"> {# media image #} {% if entry.media_content %} {% for media in entry.media_content %} {% if media.medium == 'image' %} <img src="{{ media.url }}" width="{{ media.width }}" height="{{ media.height }}" alt="" /> {% endif %} {% endfor %} {% endif %} </div> <div class="col-xs-8 col-md-9"> {# title #} <h4 class="entry-title"><a href="{{ entry.link }}">{{entry.title}}</a></h4> {# pubdate #} <div class="small">Published on: {{entry.published}}</div> {# authors #} {% if entry.authors %} <div class="small">Author{{ entry.authors|pluralize }}: {% for author in entry.authors %} {{ author.name }} {% endfor %} </div> {% endif %} {# categories #} {% if entry.tags %} <div class="small">Categories: {% for tag in entry.tags %} {% if tag.scheme %} <a href="{{ tag.scheme }}">{{ tag.term }}</a> {% else %} {{ tag.term }} {% endif %} {% endfor %} </div> {% endif %} {# description #} {% if entry.content %} {% for content in entry.content %} <div>{{ content.value|safe }}</div> {% endfor %} {% elif entry.summary %} <div>{{ entry.summary|safe }}</div> {% endif %} {# enclosure #} {% if entry.links %} {% for link in entry.links %} {% if link.rel == 'enclosure' %} <div> <audio controls> <source src="{{ link.href }}" type="{{ link.type }}"> </audio> {{ link.length|filesizeformat }} </div> {% endif %} {% endfor %} {% endif %} <a href="{{entry.link}}">read more...</a> </div> </div> {% endfor %} """ args, kwargs = [], {} bits = token.split_contents() url_string = bits[1] context_var = bits[3] if len(bits) < 4: message = "'%s' tag requires more than 3" % bits[0] raise TemplateSyntaxError(_(message)) if bits[2] != "as": message = "'%s' third argument must be 'as" % bits[0] raise TemplateSyntaxError(_(message)) kwargs = parse_tag_kwargs(bits) if url_string[0] == url_string[-1] and url_string[0] in ('"', "'"): url = url_string[1:-1] else: url = url_string return RssParserNode(context_var, url, *args, **kwargs)