Как я могу получить ссылку администратора "Просмотр на сайте" Django?

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

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

Ответ 1

Ввод

'django.contrib.sites',

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

$ ./manage.py syncdb

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

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

Ответ 2

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

Ответ 3

Как сообщается другими, для этого требуется несколько дополнительных шагов в дополнение к включению 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

Готово!

Откажитесь от reverse() для более сложного способа генерации пути в get_absolute_url().

Ответ 4

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