#django #django-templates #django-views
#django #django-шаблоны #django-представления
Вопрос:
Я хотел бы интегрировать django Databrowse в свое приложение.
Это сводится к указанию на URL-адреса databrowse из шаблона или представления для расширенной детализации функциональности databrowse.
Есть ли простой способ извлечь URL-адрес из объекта databrowse?
Комментарии:
1. Databrowse на самом деле ни во что не очень хорошо интегрируется. Честно говоря, это немного заброшенный проект.
Ответ №1:
Что ж, одним из простых способов было бы просто создать нужный URL-адрес и передать его в шаблон:
databrowse_url = '/'.join((obj._meta.app_label, obj._meta.module_name, 'objects', str(obj.id)))
А затем в шаблоне (при условии, что у вас есть databrowse, расположенный по адресу /databrowse
:
<a href="/databrowse/{{ databrowse_url }}">
Что дало бы вам URL-адрес, подобный: /databrowse/app_name/model_name/objects/1
.
Комментарии:
1. Нашел способ извлекать URL-адрес непосредственно из databrowse, но мне нравится простота этого.
Ответ №2:
Вы могли бы воссоздать URL-адреса databrowse в формате, который отображается в databrowse urls.py
Возможно, вам удастся заставить тег url работать в вашем шаблоне, передав имя представления аргументы.
Однако, если вы просмотрите исходный код, похоже, что databrowse добавит атрибут ‘url’ к объектам, с которыми он работает.
Редактировать:
Учитывая экземпляр EasyModel, вы можете сделать следующее:
my_easy_model_instance.url()
Большинство «простых» классов имеют для них метод url() или urls().
Комментарии:
1. Есть ли способ извлечь атрибут url из соответствующего объекта (
EasyModel
)?2. @Oleksiy: В вашем экземпляре EasyModel просто вызовите .url(). Я отредактирую ответ, чтобы включить это.
3. и как можно было бы извлечь объект EasyModel из экземпляра класса? Это, кажется, самая сложная часть.
4. опубликовал мою окончательную версию, использующую экземпляр повторно, все еще не совсем то, что я хочу, но это становится ближе. Спасибо за вашу помощь!
Ответ №3:
В итоге я написал класс 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-адрес объекта databrowse.