Django custom list_display в admin — проблема на производственном сервере

#python #django #nginx

Вопрос:

У меня есть форма, в которой пользователи отправляют последовательности, которые хранятся в модели user_submission. В администраторе Django я добавил пользовательский список, отображающий naming_algorithm (как показано ниже). Для этого требуется объект. последовательность и запускает внешний скрипт и отображает выходные данные в формате HTML. Это хорошо работает на местном уровне. Когда я пытаюсь использовать его на производственном сервере, он показывает плохой шлюз nginx 502. К вашему сведению: Я использую nginx и uWSGI для развертывания. Я использую Django 2.2 и Python3.7.

 class UserSubmissionAdmin(admin.ModelAdmin):

    list_display = (
        'submittersname',
        'accession_url',
        'naming_algorithm',
    )

   def naming_algorithm(self, obj):
        if ">" in str(obj.sequence).split('n')[0]:
            obj.sequence = 'n'.join(
                str(obj.sequence).split('n')[1:])
        return format_html('<a href="/run_naming_algorithm/?fulltextarea={0}amp;submission_id={1}" target="_blank">Naming Algorithm</a>'.format(obj.sequence, obj.id))
 

У меня есть несколько вопросов

  1. На производственном сервере, если я изменю DEBUG=True, вышеуказанная функция будет работать. Если я изменю его на DEBUG=False, nginx сообщит о 502 плохих шлюзах. Почему это происходит и как подойти к проблеме и устранить ее. Любые указатели помогут.
  2. Как вы можете видеть на скриншоте, я передаю последовательность по URL-адресу. Мне кажется, что должен быть лучший способ сделать это. Я не осознаю этого. У вас есть какие-либо предложения или альтернативные способы?

введите описание изображения здесь

Комментарии:

1. Работает ли это в рабочей среде, если вы закомментируете общую модель вместе с DEBUG=False?

2. @HemantMalik да, это работает в производстве, если я сохраняю DEBUG=False.

Ответ №1:

Используйте функцию mark_safe() вокруг вашего html

 return format_html(mark_safe('<a href="/run_naming_algorithm/?fulltextarea={0}amp;submission_id={1}" target="_blank">Naming Algorithm</a>'.format(obj.sequence, obj.id)))

 

Комментарии:

1. Спасибо за ответ. Я проверю и обновлю вас в ближайший понедельник.

2. Я попробовал предложить, что это не сработает. Я импортировал mark_safe from django.utils.html import format_html, mark_safe