Как я могу получить ссылку администратора "Просмотр на сайте" 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 или экземпляр сайта, подумал администратор, не забудьте перезапустить веб-сервер, чтобы изменения вступили в силу.