Installation
pip install django_render_partial
- Add
'django_render_partial'
to INSTALLED_APPS
- Ensure that
'django.template.context_processors.request'
is in
TEMPLATES['OPTIONS']['context_processors']
Usage
Write a template for partial view, e.g. partial_view.html
::
<p>{{ arg1 }} + {{ arg2 }} = {{ result }}</p>
Write a partial view::
def partial_view(request, *args, **kwargs):
result = kwargs['arg1'] + kwargs['arg2']
kwargs['result'] = result
return render(request, 'partial_view.html', kwargs)
if you are using function-based views, or::
class PartialView(TemplateView):
template_name = 'partial_view.html'
def get_context_data(self, **kwargs):
result = kwargs['arg1'] + kwargs['arg2']
kwargs['result'] = result
return super(PartialView, self).get_context_data(**kwargs)
if you are using class-based views.
Add it to urls.py
::
url(r'^partial-view/(?P<arg1>\w+)/(?P<arg2>\w+)/$',
partial_view,
name='partial_view'),
or::
url(r'^partial-view/(?P<arg1>\w+)/(?P<arg2>\w+)/$',
PartialView.as_view(),
name='partial_view'),
In your template::
{% load render_partial %}
{% with some_var=2 %}
{% render_partial 'partial_view' arg1=40 arg2=some_var %}
{% endwith %}
The render_partial
tag would be rendered to::
<p>40 + 2 = 42</p>
Note that the with
tag above is not required for render_partial
to work. It is used to show that render_partial
accepts variables.
Every argument will be evaluated against context except for the names of
any keyword arguments.
If you don't want to expose your partial view in urls.py
, you can
also use fully qualified dot separated view name::
{% render_partial 'partial_test.views.PartialView' arg1=40 arg2=some_var %}
{% render_partial 'partial_test.views.partial_view' arg1=40 arg2=some_var %}
IMPORTANT: the calling template must receive a context variable called
request
containing the original HttpRequest
. Don't forget to add
'django.template.context_processors.request'
to
TEMPLATES['OPTIONS']['context_processors']
.
Adapted from https://djangosnippets.org/snippets/1568/