Получение администраторского URL Django для объекта

elif user_input! = "1" или user_input! = "2":

позволяет предположить, что ваш пользовательский ввод равен "1", тогда это утверждение станет истинным, поскольку user_input (1) не равно to (2)

Поэтому вам нужно изменить это утверждение на что-то вроде этого:

def validate(q):
    user_input = input(q)
    if len(user_input) == 0:
        return False

    if user_input == str(1) or user_input == str(2):    # Valid Options
        return user_input
    else:
        print("Invalid option, please choose another option")
        return False
156
задан Kara 23 January 2014 в 16:40
поделиться

7 ответов

У меня была аналогичная проблема, когда я пытался вызвать reverse ('admin_index') и постоянно получал django.core.urlresolvers.NoReverseMatch ошибки.

Оказывается, в моем файле urls.py были URL-адреса администратора старого формата.

В моих шаблонах URL-адресов было следующее:

(r'^admin/(.*)', admin.site.root),

, который заставляет экраны администратора работать, но является устаревшим способом сделать это. Мне нужно было изменить его на следующее:

(r'^admin/', include(admin.site.urls) ),

Как только я это сделал, все добро, обещанное в документации Reversing Admin URLs , начало работать.

59
ответ дан 23 November 2019 в 21:47
поделиться

Поскольку пред 1.1 django это просто (для администраторского экземпляра сайта по умолчанию):

reverse('admin_%s_%s_change' % (app_label, model_name), args=(object_id,))
10
ответ дан Alex Koshelev 23 November 2019 в 21:47
поделиться

Я решил это путем изменения выражения на:

reverse( 'django-admin', args=["%s/%s/%s/" % (app_label, model_name, object_id)] )

Это требует/принимает, чтобы корневой URL conf имел название "администраторского" обработчика URL, главным образом то имя является "django-администратором",

т.е. в корневом URL conf:

url(r'^admin/(.*)', admin.site.root, name='django-admin'),

Это, кажется, работает, но я не уверен в его чистоте.

1
ответ дан hasen 23 November 2019 в 21:47
поделиться

Если вы используете 1.0, попробуйте создать собственный тег шаблона, который выглядит следующим образом:

def adminpageurl(object, link=None):
    if link is None:
        link = object
    return "<a href=\"/admin/%s/%s/%d\">%s</a>" % (
        instance._meta.app_label,
        instance._meta.module_name,
        instance.id,
        link,
    )

, а затем просто используйте {% adminpageurl my_object%} в вашем шаблоне (не забудьте сначала загрузить тег шаблона)

3
ответ дан 23 November 2019 в 21:47
поделиться
from django.core.urlresolvers import reverse
def url_to_edit_object(obj):
  url = reverse('admin:%s_%s_change' % (obj._meta.app_label,  obj._meta.model_name),  args=[obj.id] )
  return u'<a href="%s">Edit %s</a>' % (url,  obj.__unicode__())

Это похоже на решение hansen_j, за исключением того, что оно использует пространства имен URL , admin: пространство имен приложения по умолчанию для администратора.

97
ответ дан 23 November 2019 в 21:47
поделиться

Вы можете использовать URL resolver непосредственно в шаблоне, нет необходимости писать свой собственный фильтр. Например,

{% url 'admin:index' %}

{% url 'admin:polls_choice_add' %}

{% url 'admin:polls_choice_change' choice. id %}

{% url 'admin:polls_choice_changelist' %}

Ссылка: Документация

377
ответ дан 23 November 2019 в 21:47
поделиться

Вот еще один вариант, используя модели:

Создать базовую модель (или просто добавить метод admin_link к конкретной модели)

class CommonModel(models.Model):
    def admin_link(self):
        if self.pk:
            return mark_safe(u'<a target="_blank" href="../../../%s/%s/%s/">%s</a>' % (self._meta.app_label,
                    self._meta.object_name.lower(), self.pk, self))
        else:
            return mark_safe(u'')
    class Meta:
        abstract = True

Наследовать от этой базовой модели

   class User(CommonModel):
        username = models.CharField(max_length=765)
        password = models.CharField(max_length=192)

Использовать его в шаблоне

{{ user.admin_link }}

Или просмотреть

user.admin_link()
0
ответ дан 23 November 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: