#19735 closed New feature (wontfix)
Sometimes string interpolation is needed in templates
Reported by: | aalexgabi | Owned by: | nobody |
---|---|---|---|
Component: | Template system | Version: | |
Severity: | Normal | Keywords: | filter, interpolation |
Cc: | Marc Tamlyn | Triage Stage: | Design decision needed |
Has patch: | yes | Needs documentation: | yes |
Needs tests: | yes | Patch needs improvement: | yes |
Easy pickings: | yes | UI/UX: | no |
Description
Sometimes string interpolation is needed in templates. I.e. http://stackoverflow.com/questions/14626680/how-to-interpolate-already-translated-string-in-django-templates
I made a pull request here https://github.com/django/django/pull/699
Change History (5)
comment:1 by , 12 years ago
Needs documentation: | set |
---|---|
Needs tests: | set |
Patch needs improvement: | set |
Triage Stage: | Unreviewed → Design decision needed |
Version: | 1.4 |
comment:2 by , 12 years ago
comment:3 by , 12 years ago
Resolution: | → wontfix |
---|---|
Status: | new → closed |
I don't think this is nearly a common enough need to warrant adding a new built-in filter to Django. There's a reason Django lets you write your own filters and tags when you need them, and this one is easy enough to write for those who want it.
comment:4 by , 12 years ago
UPDATE: @carljm I saw your message after posting this one
If the view and the template are generic it is not possible to use blocktrans. Specific parameters for generic views are passed in urls.py. Here is an example:
urls.py
(r'^media/delete/(?P<object_id>[0-9]+)/$', views.generic_delete, { 'model': models.Media, 'template_name': 'openservices/partials/generic_delete.html', 'extra_context': { 'page_title': _('Delete media'), 'message': _('Do you want to remove media %s? Media will be lost!'), },
generic_delete.html
{% block content %} <div class="modal in" tabindex="-1" role="dialog" aria-labelledby="formHeader" aria-hidden="true" data-keyboard="false" data-backdrop="static" style="display: block"> <form class="form-horizontal" method="post"> <div class="modal-header"> <a class="close" href="{{ next }}">×</a> <h3 id="formHeader"> {{ page_title }} </h3> </div> <div class="modal-body"> <p class="text-error"> {{ message|interpolate:object }} </p> {% csrf_token %} </div> <div class="modal-footer"> <a class="btn" href="{{ next }}">{% trans 'Close' %}</a> <input type="submit" class="btn btn-danger" value="{% trans 'Delete' %}"> </div> </form> </div> <a class="modal-backdrop in" href="{{ next }}"></a> {% endblock %}
The same template and view is used for multiple models. For each model there is a different confirmation message. Blocktrans cannot be used because it requires hard coding the string that needs to be translated in the template.
comment:5 by , 12 years ago
URLconfs aren't supposed to contain your entire application.
In this case it's much more reasonable to subclass the generic view and override get_context_data.
(Reading the Stack Overflow question) I don't understand what's the relationship with translation.
If you need to interpolate and translate you can simply use the blocktrans tag in the i18n template library.