Merge pull request #850 from ostcar/absolute_url-filter
Absolute url filter
This commit is contained in:
commit
ef000829e0
0
openslides/core/templatetags/__init__.py
Normal file
0
openslides/core/templatetags/__init__.py
Normal file
@ -10,6 +10,8 @@
|
|||||||
:license: GNU GPL, see LICENSE for more details.
|
:license: GNU GPL, see LICENSE for more details.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import warnings
|
||||||
|
|
||||||
from django import template
|
from django import template
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from openslides.config.api import config
|
from openslides.config.api import config
|
||||||
@ -35,10 +37,25 @@ def trans(value):
|
|||||||
|
|
||||||
@register.simple_tag
|
@register.simple_tag
|
||||||
def model_url(object, link='view'):
|
def model_url(object, link='view'):
|
||||||
# TODO: Rename to object_url
|
warnings.warn("model_url is deprecated; use absolute_url instead",
|
||||||
|
DeprecationWarning)
|
||||||
return object.get_absolute_url(link)
|
return object.get_absolute_url(link)
|
||||||
|
|
||||||
|
|
||||||
|
@register.filter
|
||||||
|
def absolute_url(model, link='detail'):
|
||||||
|
"""
|
||||||
|
Returns the absolute_url to a model. The 'link' argument decides which url
|
||||||
|
will be returned. See get_absolute_url() in the model.
|
||||||
|
|
||||||
|
Example: {{ motion|absolute_url:'delete' }}
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
return model.get_absolute_url(link)
|
||||||
|
except ValueError:
|
||||||
|
return ''
|
||||||
|
|
||||||
|
|
||||||
@register.filter
|
@register.filter
|
||||||
def first_line(text):
|
def first_line(text):
|
||||||
try:
|
try:
|
@ -111,7 +111,6 @@ INSTALLED_APPS = (
|
|||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
'django.contrib.humanize',
|
'django.contrib.humanize',
|
||||||
'mptt',
|
'mptt',
|
||||||
'openslides.utils',
|
|
||||||
'openslides.poll',
|
'openslides.poll',
|
||||||
'openslides.core',
|
'openslides.core',
|
||||||
'openslides.account',
|
'openslides.account',
|
||||||
|
12
tests/core/models.py
Normal file
12
tests/core/models.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
|
class TestModel(models.Model):
|
||||||
|
name = models.CharField(max_length='255')
|
||||||
|
|
||||||
|
def get_absolute_url(self, link='detail'):
|
||||||
|
if link == 'detail':
|
||||||
|
return 'detail-url-here'
|
||||||
|
if link == 'delete':
|
||||||
|
return 'delete-url-here'
|
||||||
|
raise ValueError('No URL for %s' % link)
|
@ -13,6 +13,8 @@ from django.template import Template, Context
|
|||||||
from openslides.utils.test import TestCase
|
from openslides.utils.test import TestCase
|
||||||
from openslides.config.api import config
|
from openslides.config.api import config
|
||||||
|
|
||||||
|
from .models import TestModel
|
||||||
|
|
||||||
|
|
||||||
class ConfigTagAndFilter(TestCase):
|
class ConfigTagAndFilter(TestCase):
|
||||||
def test_config_tag(self):
|
def test_config_tag(self):
|
||||||
@ -37,3 +39,32 @@ class ConfigTagAndFilter(TestCase):
|
|||||||
template = Template(template_code)
|
template = Template(template_code)
|
||||||
self.assertTrue('FdgfkR04jtg9f8bq' in template.render(Context({})))
|
self.assertTrue('FdgfkR04jtg9f8bq' in template.render(Context({})))
|
||||||
self.assertFalse('bad_e0fvkfHFD' in template.render(Context({})))
|
self.assertFalse('bad_e0fvkfHFD' in template.render(Context({})))
|
||||||
|
|
||||||
|
|
||||||
|
class AbsoluteUrlFilter(TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.model = TestModel.objects.create(name='test_model')
|
||||||
|
|
||||||
|
def test_default_argument(self):
|
||||||
|
"""
|
||||||
|
Test to call absolute_url without an argument.
|
||||||
|
"""
|
||||||
|
t = Template("{% load tags %}URL: {{ model|absolute_url }}")
|
||||||
|
html = t.render(Context({'model': self.model}))
|
||||||
|
self.assertEqual(html, 'URL: detail-url-here')
|
||||||
|
|
||||||
|
def test_with_argument(self):
|
||||||
|
"""
|
||||||
|
Test to call absolute_url with an argument.
|
||||||
|
"""
|
||||||
|
t = Template("{% load tags %}URL: {{ model|absolute_url:'delete' }}")
|
||||||
|
html = t.render(Context({'model': self.model}))
|
||||||
|
self.assertEqual(html, 'URL: delete-url-here')
|
||||||
|
|
||||||
|
def test_wrong_argument(self):
|
||||||
|
"""
|
||||||
|
Test to call absolute_url with a non existing argument.
|
||||||
|
"""
|
||||||
|
t = Template("{% load tags %}URL: {{ model|absolute_url:'wrong' }}")
|
||||||
|
html = t.render(Context({'model': self.model}))
|
||||||
|
self.assertEqual(html, 'URL: ')
|
Loading…
Reference in New Issue
Block a user