Login

3110 snippets

Snippet List

DropDownMultiple widget

Observation: depends on jQuery to works! This widget works like other multiple select widgets, but it shows a drop down field for each choice user does, and aways let a blank choice at the end where the user can choose a new, etc. Example using it: class MyForm(forms.ModelForm): categories = forms.Field(widget=DropDownMultiple) def __init__(self, *args, **kwargs): self.base_fields['categories'].widget.choices = Category.objects.values_list('id', 'name') super(MyForm, self).__init__(*args, **kwargs)

  • newforms
  • multiple
  • forms
  • jquery
  • select
  • widget
Read More

Pagination Alphabetically compatible with paginator_class

This is just a modified version of a [previous snippet](http://djangosnippets.org/snippets/1364/) to make it work with unicode and with class-based ListView paginator_class To use it put this in your urls.py: `from youapp.fileyouchose import NamePaginator` `urlpatterns = patterns('',` `url(r'^example/(?P<page>[0-9]+)/$', ListView.as_view(model=myModel,template_name="mytemplate.html",paginator_class=NamePaginator,paginate_by=25), name="url_name"),` And then in your template something like this would work: {% if page_obj.has_other_pages %} <div class="row"> <div class="span12"> <div class="pagination"> <ul> {% if page_obj.has_previous %} <li><a href="{% url page page=page_obj.previous_page_number %}">Prev</a></li> {% else %} <li class="disabled"><a>Prev</a></li> {% endif %} {% for p in page_obj.paginator.pages %} <li {% if p == page_obj %}class="active"{% endif %}> <a href="{% url category_page page=p.number %}">{{ p }}</a> </li> {% endfor %} {% if page_obj.has_next %} <li><a href="{% url page page=page_obj.next_page_number %}">Next</a></li> {% else %} <li class="disabled"><a>Next</a></li> {% endif %} </ul> </div> </div> </div> {% endif %}

  • django
  • pagination
  • listview
Read More

Continuing and breaking from loops in Django templates

This snippet makes Django templates support `break` and `continue` in loops. It is actually more powerful than the respective Python statements as it allows breaking and continuing from an outer loop, not just the innermost. `break` and `continue` are implemented as template filters, with the input value being the loop variable. For example, to break from the current `for` loop use `forloop|break`, and to continue from the next outer loop use `forloop.parentloop|continue`. The implementation monkeypatches Django (specifically Nodelist and ForNode) and has been tested on v1.2 with Python 2.6.

  • template
  • loop
  • break
  • continue
Read More

ContentType template filter

Custom template filter to retrieve a content type of a given model instance. Useful for ModelForms which want to set the content_type field (i.e: GenericForeignKey). ### A usage example: {% load helpers %} {% with instance|content_type as ctype %} <input type="hidden" name="content_type" value="{{ ctype.pk }}"> {% endwith %} Original idea from [this stackoverflow answer] [1] [1]: http://stackoverflow.com/a/12807458/484127

  • template
  • filter
  • tag
  • contenttypes
  • contenttype
  • GenericForeignKey
Read More

query builder

""" Takes arguments & constructs Qs for filter() We make sure we don't construct empty filters that would return too many results We return an empty dict if we have no filters so we can still return an empty response from the view """

  • query
  • queryset
Read More

aggregate filter

Makes it possible to add a filtering condition directly after the aggregate function (or possible, `aggregate(expression) WITHIN GROUP (ordering clause)`. This is mostly useful if the annotation has two or more expressions, so it's possible to compare the result with and without the applied filter; it's more compact than using `Case`. It's suggested to add `values` to the queryset to get a proper group by. Usage example: `books = Book.objects.values('publisher__name').annotate( count=Count('*'), filtercount=Filter(expression=Count('publisher__name'), condition=Q(rating__gte=5)) ) ` Supported on Postgresql 9.4+. Possible other third-party backends.

  • filter
  • postgresql
  • olap
  • aggregate
  • expression
Read More

Cachable Django Paginator

This is a modificated version of `CachedPaginator` by **daniellindsley** [https://djangosnippets.org/snippets/1173/](https://djangosnippets.org/snippets/1173/) ([web-arhive-link](https://web.archive.org/web/20150927100427/https://djangosnippets.org/snippets/1173/)). Which not only cache `result_objects`, but the `total_count` of the `queryset` too (usefull if computating the count is an expensive operation too).

  • django
  • cache
  • pagination
Read More

Dead Code Finder

Rough check for unused methods in our apps. Scans models, views, utils, api, forms and signals files for what look like methods calls, then looks at all of our classes' methods to ensure each is called. Do not trust this blindly but it's a good way to get leads on what may be dead code. Assumes a setting called `LOCAL_APPS` so it only bothers to look at the code you've written rather than everything in `INSTALLED_APPS`.

  • refactor
  • cleanup
Read More

Raw include from static dir tag

This is useful when you don't want to put any `{% verbatim %}` tag in the file(s) you're including within template(s) (because you want it/them completely raw) and when you want to load such file(s) from static dir(s), as native `{% include %}` tag can't achieve that (still). Put the provided code in *templatetags/rawinclude.py* in your Django app, and then use it in your template(s) like this: `{% load rawinclude %}{% raw_include 'file.html' %}`

  • include
  • verbatim
  • raw
Read More

Dynamic Paginator Mixin

Dynamic Paginator Mixin for Django 1.8.* - 1.9.*, also work for CBV (Class Bassed View) but not for "django generic view".

  • django
  • pagination
  • paginator
Read More

Dynamic DEBUG setting for PyCharm

1. Next to the Play button you can Edit Configuration 2. Click the green + on the left, add 2 "Django Server". Call one DEBUG, call the other RUN. 3. Add "DEBUG False" to RUN in its "Environment variables" 4. Add "DEBUG True" to DEBUG in its "Environment variables" (make sure the port # is different from RUN!) Change `DEBUG = True` in `settings.py` to the below code Go back to the main IDE window and either select RUN or DEBUG and go to localhost/404 to either see the dev debug 404 or your custom `404.html` (that you obviously previously made in the `/templates/` folder ;)

  • PyCharm
  • DEBUG
  • IDE
  • Dynamic
Read More