Добавление python скрипта в views.py в django и запуск нажатием кнопки - PullRequest
0 голосов
/ 29 мая 2020

Здесь всего новичок.

Пытаюсь создать веб-приложение, которое генерирует и отображает случайное видео при нажатии кнопки на странице django.

У меня python сценарий, который генерирует видео.

У меня есть проект django с templates / home. html, views.py, urls.py и мой python script videogenfull.py в нем. На данный момент это выглядит так ..


views.py: 

from django.http import HttpResponse 
from django.shortcuts import render

def home_view(request, *args, **kwargs): 
    print(args, kwargs) 
    print(request.user) 
    return render(request, "home.html", {})


urls.py: 

from django.contrib import admin 
from django.urls import path

from pages.views import home_view

urlpatterns = [ 
    path('', home_view, name='home'), 
    path('admin/', admin.site.urls)
]

videogenfull.py - извлекает случайные видео из Интернета, редактирует их и экспортирует как одно (очень маленькое) видео. Я установил папку stati c, в которой сгенерированное видео будет go, и вставлю некоторый код html дома. html для воспроизведения видео.

Страница html успешно отображается в моем браузере - текстовый заголовок и временное видео на данный момент.

Затем я знаю, что мне нужно:

  • создать кнопку html / ajax / jquery в моем html файл
  • напишите код в views.py, чтобы получить videogenfull.py, чтобы он срабатывал при нажатии кнопки

Я был в этой последней части для хорошо и не могу понять, как это сделать. Это в общих чертах то, что мне нужно делать?

home.html:

<button id="myClickButton" type="button">Click</button>
<div id="myOutput"></div>

$("#myClickButton").click(function() {
    $.get("/output/", function(data) {
        $("#myOutput").html(data);
    }, "html");
});

views.py:

def index(request):
    return render(request, 'yourapp/index.html')

Спасибо!

1 Ответ

0 голосов
/ 30 мая 2020

Сначала создайте функцию в views.py

from django.http import HttpResponse 
from django.shortcuts import render

def home_view(request, *args, **kwargs): 
    print(args, kwargs) 
    print(request.user)
    return render(request, "home.html")

def output_view(request):
    return HttpResponse("<h1>Hello World</h1>")

Затем вам нужно назначить ее url output/ в urls.py

from django.contrib import admin
from django.urls import path

from pages.views import home_view, output_view

urlpatterns = [
    path('', home_view, name='home'), 
    path('output/', output_view, name='output'), 
    path('admin/', admin.site.urls),
]

И вы должны использовать <script> in home.html

<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>

<button id="myClickButton" type="button">Click</button>

<div id="myOutput"></div>

<script>
  $("#myClickButton").click(function() {
    $.get("/output/", function(data) {
      $("#myOutput").html(data);
    }, "html");
  });
</script>

Если это работает, вы можете попробовать использовать videogenfull.py в функции output(). Но может потребоваться дополнительная работа, поэтому я могу только показать идеи, как его использовать.

Вы можете запустить его как подпроцесс

import subprocess

def output_view(requests):
    subprocess.run(["python", "videogenfull.py"])
    return HttpResponse("<h1>Hello World</h1>")

или вы можете использовать его как модуль - если у вас есть код в функции (ах) - ie.

import videogenfull

def output_view(requests):
    filename = videogenfull.some_function()
    return HttpResponse(f'<h1>Hello World</h1><video src="{filename}"/>')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...