Как я могу получить ссылку администратора "Django" Просмотр на сайте "для работы? - PullRequest
12 голосов
/ 26 мая 2009

Я некоторое время работал с приложением Django, и интерфейс администрирования Django прекрасно работает, за исключением , что ссылка "Просмотр на сайте" не работает. Всякий раз, когда я пытаюсь его использовать, я получаю OperationalError с сообщением: no such table: django_site. Я провел некоторое исследование этой проблемы, и мне кажется, что для работы этой ссылки мне нужно настроить Django-сайты , но я точно знаю, как это сделать. В документации говорится о таблицах базы данных и т. Д., Но не говорится, как на самом деле настроить сайт. Так что мой вопрос действительно двойственный:

  1. Как настроить фреймворк для сайтов? Должен ли я сам создавать таблицу (и сам вводить данные), или мне нужно что-то включить, чтобы ./manage.py syncdb автоматически "обнаружил", что я хочу настроить таблицу?
  2. Повлияет ли настройка фреймворка сайтов на локальную разработку (т. Е. Просто на localhost, а не на мое фактическое доменное имя)? Должен ли я что-то добавить к settings.py, например SITE_ID = 2 if DEBUG else 1, или manage.py просто обнаружит, что я работаю на сайте отладки и ничего не делать с инфраструктурой сайтов?

Ответы [ 5 ]

11 голосов
/ 27 мая 2009

Определите get_absolute_url для вашей модели. Администратор использует этот метод, чтобы выяснить, как создать URL-адрес объекта. См. документы .

9 голосов
/ 26 мая 2009

Ввод

'django.contrib.sites',

в ваш INSTALLED_APPS и следующий

$ ./manage.py syncdb

может быть достаточно.

После установки отредактируйте экземпляр сайта (например, через /admin интерфейс), чтобы отобразить ваше локальное имя хоста (например, localhost:8000).

2 голосов
/ 04 февраля 2017

Как сообщают другие, для включения view_on_site требуется пара дополнительных шагов. Вы должны реализовать get_absolute_url () в вашей модели и включить сайты в настройках вашего проекта.

Установить настройку view_on_site

Добавить настройку view_on_site в форму администратора:

class MymodelAdmin(admin.ModelAdmin):
    ...
    view_on_site = True
...
admin.site.register(Mymodel, MymodelAdmin)

Реализация get_absolute_url ()

Добавьте get_absolute_url () к вашей модели. В models.py:

Mymodel(models.Model):
    ...
    def get_absolute_url(self):
        return "/mystuff/%i" % self.id

Включить сайты

Добавление сайтов в yourapp / settings.py:

INSTALLED_APPS = (
    ...
    'django.contrib.sites',
    ...
)

Затем обновите базу данных:

$ python manage.py migrate

Готово! * * 1023 Проверьте reverse () для более изощренного способа создания пути в get_absolute_url ().

0 голосов
/ 18 ноября 2018

Мне кажется, что представление о функциональности сайта работает, только если get_absolute_url ссылается на представление Django. Кажется, он не работает, если вы пытаетесь создать ссылку, которая перенаправляет на страницу, находящуюся вне контроля Django (даже если она обслуживается из того же домена самим apache).

В этом случае легко создать кнопку вручную, переопределив административный темп следующим образом:

{% extends "admin/change_form.html" %}
{% block object-tools-items %}
{{ block.super }}
  <li>
    <a class="viewsitelink" href="{{ original.get_absolute_url }}">View on my site, out of Django's control</a>
  </li>
{% endblock %}

Кроме того, добавьте view_on_site = False к вашему классу ModelAdmin, в противном случае появятся обе кнопки.

0 голосов
/ 10 июля 2012

Когда вы отредактировали SITE_ID в settings.py или экземпляр сайта считал администратором, не забудьте перезапустить веб-сервер, чтобы изменения вступили в силу.

...