Найти - Пользователи
Полная версия: Как вызвать скрипт Питона из Джанго
Начало » Python для новичков » Как вызвать скрипт Питона из Джанго
1
dvadim
Есть интернет-магазин на Django у которого имеется файл create_yml.py , который генерит прайс для Яндекс маркета market.xml и кладет его в папку /yml/.
Скрипт взывается из консоли командой: “MySite/manage.py create_yml > /yml/market.xml”.

Как сделать в админке ( admin/index.html ) гиперссылку, по нажатии которой будет выполняться вышеуказанная команда ( create_yml > /yml/market.xml ).

Да простят ветераны форума мой нубский вопрос Что такое urls.py и views.py я знаю, но, увы , моих знаний недостаточно, чтобы решить эту проблему. Заранее спасибо за помощь.
Striver
Вызов внешней программы из питона:
 import subprocess
proc = subprocess.run("python MySite/manage.py create_yml > /yml/market.xml", shell=True)
Если надо получить результат её действия, придётся дополнительно с PIPE заморочиться, почитай про модуль subprocess.

Как сделать в админке ( admin/index.html ) гиперссылку
Если имеется ввиду встроенная джанговская админка, то не знаю, я её менять никогда не пытался. Если же это некая ваша собственная админка, то всё так же, как и для обычных ссылок: добавляем урл в urls.py, создаём отдельную view-функцию с вызовом скрипта, добавляем ссылку в шаблон.

И это… Для вопросов по Джанге тут на форуме отдельная тема есть.
dvadim
Striver, спасибо за помощь, хотя вопрос был немного в другом, навели на мысль как сделать “в лоб”. Оставляю это тут это для будущих нубов: “Как запустить питоновский скрипт, который не рендерит страницу, а просто выполняет определенную функцию (на примере гиперссылки из админки)”.


Добавляем в файл /admin/index.html:
 <a style="display: block;" href="/admin/generate_yml/">Обновить Yandex.xml</a>

Добавляем в файл /app/viewes.py:
 url(r'^admin/generate_yml/', views.generate_yml, name='generate_yml'),

Добавляем в файл /app/views.py:
 def generate_yml(self):
    from app.management.commands.create_yml_helper import generate_yml
    from django.http import HttpResponse
    generate_yml()
    return HttpResponse("Yandex price created Successfully!")


Создаем запускаемый файл create_yml_helper ( в моем случае путь app/management/commands) такого содержания:

 import os
# Файл на Python запускает команду оболочки Linux 
def generate_yml(self):
  try:
      command = 'YOUR_OWN_PATH/venv/bin/python YOUR_OWN_PATH/manage.py create_yml > your_own_path/yml/market.xml' # Тут м.б. любая команда 
      os.system(command)
  except:
      print('Ошибка генерации Ya Xml')

Да, сделано сильно через одно место, но работает
kalkerre
Уважаемый dvadim!
dvadim
интернет-магазин на Django у которого имеется файл create_yml.py
А поделитесь, по-братски, вот этим самым create_yml.py! Буду премного вам благодарен!
dvadim
kalkerre
Уважаемый dvadim!
Держите (файл прикрепляю).
kalkerre
dvadim
Благодарю!
Кстати, по вашему вопросу - не проще ли сделать на сервере cron-задачу с запуском скрипта, который генерит этот хмл? У меня так и сделано, например. Автоматически каждые 10 минут - новый файлик (старый перезаписывается)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB