Обращаясь к ссылкам в базе данных в шаблонах - PullRequest
0 голосов
/ 11 мая 2011

Я хотел бы интегрировать django Databrowse в мое приложение.

Все сводится к указанию на URL-адреса в базе данных из шаблона или представления для расширенной функциональности детализации для просмотра.

Есть ли простой способ извлечь URL из объекта просмотра данных?

Ответы [ 3 ]

2 голосов
/ 12 мая 2011

Ну, одним простым способом было бы просто создать нужный URL и передать его в шаблон:

databrowse_url = '/'.join((obj._meta.app_label, obj._meta.module_name, 'objects', str(obj.id)))

А затем в шаблоне (при условии, что у вас есть база данных, расположенная в /databrowse:

<a href="/databrowse/{{ databrowse_url }}">

Который дал бы вам URL вроде: /databrowse/app_name/model_name/objects/1.

0 голосов
/ 13 мая 2011

Завершено написание класса mixin, который выбирает соответствующий EasyInstance и повторно использует url() этого:

from django.contrib.databrowse.datastructures import EasyModel
from django.contrib.databrowse import site   

class DatabrowseMixin:
     def url(pyClass):
          if not site.root_url:
               #hack, but root_url is not set until the first databrowse view
               #and resolving urlconf does not work either
               site.root_url = '/databrowse/' 

          easy_model = EasyModel(site, pyClass.__class__)
          obj = easy_model.object_by_pk(pyClass.pk)

          return obj.url()

class MyModel(models.Model, DatabrowseMixin):
     ...

Теперь в моих шаблонах я могу повторно использовать тег my_model_instance.url, указывающий на URL-адрес объекта в базе данных.

0 голосов
/ 12 мая 2011

Вы можете воссоздать URL-адреса строк данных в формате, который отображается в url.py

databrowse.

Возможно, вам удастся заставить тег url работать в вашем шаблоне, передав имя представления + аргументы.

Однако, если вы просматриваете источник , похоже, что databrowse добавит атрибут 'url' к объектам, с которыми он работает.

EDIT:

Для экземпляра EasyModel вы можете сделать следующее:

my_easy_model_instance.url()

Большинство классов 'Easy' имеют методы url () или urls ().

...