Antes do Django 1.0, havia uma maneira fácil de obter o URL de administração de um objeto, e eu havia escrito um pequeno filtro que usaria assim: <a href="{{ object|admin_url }}" .... > ... </a>
Basicamente, eu estava usando a função reversa de URL com o nome da exibição sendo 'django.contrib.admin.views.main.change_stage'
reverse( 'django.contrib.admin.views.main.change_stage', args=[app_label, model_name, object_id] )
para obter o URL.
Como você deve ter adivinhado, estou tentando atualizar para a versão mais recente do Django, e este é um dos obstáculos que encontrei, esse método para obter o URL do administrador não funciona mais.
Como posso fazer isso no django 1.0? (ou 1.1 nesse caso, pois estou tentando atualizar para a versão mais recente no svn).
fonte
Você pode usar o resolvedor de URL diretamente em um modelo, não há necessidade de escrever seu próprio filtro. Por exemplo
{% url 'admin:index' %}
{% url 'admin:polls_choice_add' %}
{% url 'admin:polls_choice_change' choice.id %}
{% url 'admin:polls_choice_changelist' %}
Ref: Documentação
fonte
Isso é semelhante à solução do hansen_j, exceto pelo uso de namespaces de URL , admin: sendo o namespace do aplicativo padrão do admin.
fonte
args=[object.pk]
vez deargs=[object.id]
. Abrange casos mais comuns, quando o campo de chave primária tiver outro nome que nãoid
.object._meta.app_label
deixe-me finalmente obter o nome do próprio aplicativo de autenticação do django. Éauth
, por exemplo,reverse(admin:auth_user_change, args=[object.id])
para ir para a página de alteração de usuárioExiste outra maneira para as versões posteriores, por exemplo, na 1.10 :
Onde
opts
é algo comomymodelinstance._meta
ouMyModelClass._meta
Uma dica é que você não pode acessar atributos de sublinhado diretamente nos modelos do Django (como
{{ myinstance._meta }}
), então você precisa passar oopts
objeto da visualização como contexto do modelo.fonte
Essencialmente o mesmo que a resposta de Mike Ramirez, mas mais simples e mais próxima da estilística ao
get_absolute_url
método padrão do django :fonte
Para o 1.1 django anterior, é simples (para a instância padrão do site de administração):
fonte
Se você estiver usando o 1.0, tente criar uma etiqueta de modelo personalizada semelhante a esta:
use apenas {% adminpageurl my_object%} no seu modelo (não se esqueça de carregar primeiro a etiqueta de modelo)
fonte
Resolvi isso alterando a expressão para:
Isso requer / supõe que o URL ur conf tenha um nome para o manipulador de URL "admin", principalmente esse nome é "django-admin",
ou seja, no URL raiz conf:
Parece estar funcionando, mas não tenho certeza de sua limpeza.
fonte
Aqui está outra opção, usando modelos:
Crie um modelo base (ou apenas adicione o método admin_link a um modelo específico)
Herdar desse modelo base
Use-o em um modelo
Ou veja
fonte