Comment ajouter un bouton qui vous redirige vers la page html django admin page

Abdallah Oussama

Dans mon cas, je créais un modèle pour un PDF que je voulais pouvoir prévisualiser directement à partir de la page d'administration où le modèle a été créé, afin que les gens puissent voir quel serait le résultat de l'objet qu'ils venaient de créer. J'avais vraiment besoin d'un seul lien avec une vue qui afficherait un PDF pour moi, mais même quelque chose de basique n'est pas immédiatement évident dans l'administration Django. J'ai un TransactionModelenregistré dans la adminpage comme ci-dessous:

@ admin.register(Transaction)
class TransactionAdmin(admin.ModelAdmin):
   search_fields = ['chp_reference', 'familymember__name']
   inlines = [FamilyGroupInline, FamilyMemberInline]

   def report(self, obj):
       return mark_safe(json2html.convert(json=obj.report, table_attributes="class=\"results\" 
         style=\"overflow-x:auto;\""))

   fieldsets = (
       ('Transaction Details', {
           'fields': ('chp_reference', 'income_period', 'property_market_rent', 
      'rent_effective_date', 'number_of_family_group',),
    }),
    ('Report', {
        'classes': ('collapse',),
        'fields': ('report',),
     }),
   )
    readonly_fields = ['report', 'complete', 'last_rent']

Je veux que l' Reportobjet du fieldsetssoit un lien cliquable qui redirige l'utilisateur vers un fichier html, je ne sais pas si c'est possible... et si c'est, quelle est la meilleure approche pour le faire, merci !

Voici une trace de l'erreur

    Traceback (most recent call last):
    File "C:\Users\eT3\AppData\Local\Programs\Python\Python37- 
    32\lib\threading.py", line 926, in _bootstrap_inner
    self.run()
    File "C:\Users\eT3\AppData\Local\Programs\Python\Python37- 
    32\lib\threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
    File "E:\15-12\venv\lib\site-packages\django\utils\autoreload.py", line 53, 
    in wrapper
    fn(*args, **kwargs)
    File "E:\15-12\venv\lib\site- 
    packages\django\core\management\commands\runserver.py", line 117, in 

inner_run
    self.check(display_num_errors=True)
  File "E:\15-12\venv\lib\site-packages\django\core\management\base.py", line 395, in check
    include_deployment_checks=include_deployment_checks,
  File "E:\15-12\venv\lib\site-packages\django\core\management\base.py", line 382, in _run_checks
    return checks.run_checks(**kwargs)
  File "E:\15-12\venv\lib\site-packages\django\core\checks\registry.py", line 72, in run_checks
    new_errors = check(app_configs=app_configs)
  File "E:\15-12\venv\lib\site-packages\django\core\checks\urls.py", line 13, in check_url_config
    return check_resolver(resolver)
  File "E:\15-12\venv\lib\site-packages\django\core\checks\urls.py", line 23, in check_resolver
    return check_method()
  File "E:\15-12\venv\lib\site-packages\django\urls\resolvers.py", line 407, in check
    for pattern in self.url_patterns:
  File "E:\15-12\venv\lib\site-packages\django\utils\functional.py", line 48, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "E:\15-12\venv\lib\site-packages\django\urls\resolvers.py", line 588, in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
  File "E:\15-12\venv\lib\site-packages\django\utils\functional.py", line 48, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "E:\15-12\venv\lib\site-packages\django\urls\resolvers.py", line 581, in urlconf_module
    return import_module(self.urlconf_name)
  File "C:\Users\eT3\AppData\Local\Programs\Python\Python37-32\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "E:\15-12\cra-calculator-master\project\urls.py", line 45, in <module>
    path('', admin.site.urls),
  File "E:\15-12\venv\lib\site-packages\django\utils\functional.py", line 225, in inner
    return func(self._wrapped, *args)
  File "E:\15-12\venv\lib\site-packages\django\contrib\admin\sites.py", line 293, in urls
    return self.get_urls(), 'admin', self.name
  File "E:\15-12\venv\lib\site-packages\django\contrib\admin\sites.py", line 277, in get_urls
    path('%s/%s/' % (model._meta.app_label, model._meta.model_name), include(model_admin.urls)),
  File "E:\15-12\venv\lib\site-packages\django\contrib\admin\options.py", line 628, in urls
    return self.get_urls()
  File "E:\15-12\cra-calculator-master\app\admin.py", line 145, in get_urls
    urls += pattern
TypeError: 'URLPattern' object is not iterable

Voici mon preview_pdf_view()

def preview_pdf_view(self, request, **kwargs):
    tx = Transaction.objects.get(id=kwargs['id'])
    context = {'tx': tx}
    return TemplateResponse(request, 'admin/preview_pdf.html', context=context)

get_url()

def get_urls(self):
    urls = super().get_urls()
    pattern = path('preview/<int:id>/', self.admin_site.admin_view(self.preview_pdf_view), name='preview-pdf')
    urls += pattern
    return urls

et dans le models.pyj'ai ajoutépreview_link()

@property
    def preview_link(self):
        a = '''<a href=" url 'preview-pdf' id={} , name={}"</a>'''.format(self.id, self.chp_reference)
        return mark_safe(a)
forgé

Vous pouvez ajouter une petite vue personnalisée dans votre TransactionAdmin:

class TransactionAdmin(admin.ModelAdmin):

    def preview_pdf_view(self, request, **kwargs):
        tx = Transaction.objects.get(id=kwargs['id'])
        context = {'tx': tx}
        return TemplateResponse(request, 'admin/preview_pdf.html', context=context)

Assurez-vous de créer le modèle preview_pdf.html. Ici, utilisez le contexte pour rendre votre PDF avec tx.image.urlou comme vous avez cette configuration.

Pour rendre la vue accessible, ajoutez le modèle d'url à TransactionAdminla get_urlsméthode :

    def get_urls(self):
        urls = super().get_urls()
        pattern = path('preview/<int:id>/', self.admin_site.admin_view(self.preview_pdf_view), name='preview-pdf')
        urls += pattern
        return urls

Ensuite, vous pouvez avoir un lien cliquable pour chacun Transactiondans la vue de la liste des administrateurs. Je ferais cela au niveau du modèle:

from django.utils.html import mark_safe

class Transaction(models.Model):

    @property
    def preview_link(self):
        a = '''<a href="{% url 'preview-pdf' id={} %}">{}</a>'''.format(self.id, self.name)
        return mark_safe(a)
    

Vous pouvez l'utiliser dans list_display, ou n'importe où ailleurs comme transaction.preview_link:

class TransactionAdmin(admin.modelAdmin):
    list_display = ('preview_link', )

En savoir plus sur Ajout de vues aux sites d'administration https://docs.djangoproject.com/en/3.1/ref/contrib/admin/

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Comment ne pas attendre le chargement de la page lorsque vous cliquez sur un bouton qui vous redirige vers une page? Java

Comment activer Bootstrap 4 modal en cliquant sur un bouton dans la première page, qui vous redirige vers une deuxième page avec modale activée?

Comment écrire un service qui affiche du HTML ou qui redirige vers une autre page

Comment puis-je faire qu'un bouton redirige ma page vers une autre page?

Extension Chrome: Comment envoyer des données de formulaire html à une page php en cliquant sur le bouton qui redirige vers ladite page php

Comment ajouter un bouton dans la grille pour créer un lien vers une page Web ?

Comment ajouter un bouton qui peut fermer la page de chat Web ?

Comment créer un bouton HTML Cancel qui redirige vers une URL

Mon bouton qui doit vous renvoyer vers une deuxième page html ne fonctionne pas

URL http: // localhost: 8000 / admin / redirige vers la mauvaise page

Créer un bouton qui vous renvoie vers une autre page

Bouton Soumettre Django / HTML redirigeant vers la mauvaise page

Comment demander certaines API dans une autre page html lorsque vous cliquez sur un certain bouton dans la page actuelle

Comment ajouter un bouton bascule sur la page Razor

Comment ajouter un bouton à la page d'index d'ActiveAdmin

Le client de test Django redirige vers la page de connexion avec un superutilisateur connecté

Le client de test Django redirige vers la page de connexion avec un superutilisateur connecté

Bouton Ajouter au panier du produit Woocommerce supplémentaire qui redirige vers la caisse

Django: HttpResponseRedirect ne redirige pas vers la page suivante

Rediriger vers un autre bouton de page à l'intérieur de la balise d'option redirige toujours vers la même page (JavaScript)

Comment rediriger vers la page d'accueil lorsque vous cliquez sur le bouton Soumettre?

Comment rediriger la page ReactJS vers une page HTML simple en cliquant sur le bouton?

Comment ajouter un bouton à ma page (Disposition du bouton en HTML)

Comment rediriger vers une page après que quelqu'un appuie sur un bouton ? La balise meta vous permet de le faire uniquement en quelques secondes

Puis-je ajouter un bouton ou un lien vers ma page Web qui me permet d'afficher la source de cette page (comme ajouter l'URL avec view-source :) ?

Comment changer "Ajouter un utilisateur" dans la barre de navigation de la page d'ajout d'utilisateur de Django Admin ?

Balise de bouton qui renvoie vers une autre page HTML

Lorsque je clique sur le bouton Soumettre sur la page de connexion, il redirige vers une page de jeton csrf aléatoire dans django

Comment ajouter une classe qui déplace TextArea vers le haut de la page?

TOP liste

  1. 1

    Microsoft.WebApplication.targets

  2. 2

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  3. 3

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  4. 4

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  5. 5

    Passer la taille d'un tableau 2D à une fonction ?

  6. 6

    Exporter la table de l'arborescence vers CSV avec mise en forme

  7. 7

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  8. 8

    Créer un système Buzzer à l'aide de python

  9. 9

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  10. 10

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  11. 11

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  12. 12

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  13. 13

    Conversion double en BigDecimal en Java

  14. 14

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  15. 15

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  16. 16

    Comment vérifier si un utilisateur spécifique a un rôle? Discord js

  17. 17

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  18. 18

    Existe-t-il un moyen de voir si mon bot est hors ligne ?

  19. 19

    comment afficher un bouton au-dessus d'un autre élément ?

  20. 20

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  21. 21

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

chaudétiquette

Archive