Как заставить работать приложение в django? Запуск скрипта python как класса в django
Я немного новичок в django и я потерялся, я не знаю, что делать. Я объясню, что я хочу, возможно, вы сможете мне помочь.
Я хочу создать веб-страницу на моем сайте, где вы вводите свои данные и на основе ваших данных создается шаблон excel, который вы загружаете. Самое простое, вы вводите название строк и столбцов и загружаете документ excel.
Вот что я пробовал до сих пор... У меня есть папка my_django и папка my_app, в my_app я пытаюсь создать приложение для создания шаблонов
Это my_app/views.py
from django.shortcuts import render
from django.http import HttpResponse
from .forms import TemplateForm
import xlsxwriter
from xlsxwriter import workbook
def home(request):
return render(request, 'my_app/home.html')
def create_template(request):
return render(request, 'my_app/create_template.html')
class CreateMyWebTemplate():
def create_template(doc_name, name_sheet, years, name_columns):
file = xlsxwriter.Workbook(doc_name + '_template.xlsx')
worksheet_data = file.add_worksheet()
worksheet_data.write_row(0, 1, years)
worksheet_data.write_column(1, 0, name_columns)
file.close()
return file
Это my_app/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='my-home'),
path('create-template/', views.create_template, name='my-create-template'),
]
Это my_app/forms.py
from django import forms
class CreateMyWebTemplate(forms.Form):
doc_name = forms.CharField()
name_sheet = #selectedcountry
years = #listfromweb
name_rows = #imputed column names
Это my_app/template/my_app/create_template.html
{% extends "my_app/base.html" %}
{% block content %}
<div class="create-template-box">
<form action="/">
<h1>Create your template</h1>
<div class="item">
<p>Document name</p>
<div class="name-item">
<input type="text" name="doc_name" placeholder="Input document name without spaces" />
</div>
</div>
<div class="item">
<p>Select a country for the name of sheet</p>
<select name="name_sheet">
<option value="">Country</option>
<option value="1">Russia</option>
<option value="2">Germany</option>
<option value="3">France</option>
<option value="4">Armenia</option>
<option value="5">USA</option>
</select>
</div>
</div>
<div class="item" name="years">
<p>Select a years for columns</p>
<p> Start: </p> <select name="yearpicker" id="yearpicker"></select>
<br>
<p>End: </p> <select name="yearpicker2" id="yearpicker2"></select>
</div>
<div class="item">
<p>Please input a names of rows... seperate with commas</p>
<input type="text" name="name_rows"/>
</div>
<div class="btn-block">
<button type="submit" href="#">Create and Download!</button>
</div>
</form>
</div>
<script type="text/javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js">
</script>
<script type="text/javascript">
let startYear = 1800;
let endYear = new Date().getFullYear();
for (i = endYear; i > startYear; i--)
{
$('#yearpicker, #yearpicker2').append($('<option />').val(i).html(i));
}
$('select').on('change', function(){
let arr = Array.from({length:$('#yearpicker2').val() - +$('#yearpicker').val()},(v,k)=>k + +$('#yearpicker').val())
console.log(arr);
})
</script>
{% endblock content %}
В my_django
app включен в settings.py и urls.py
Для представления create_template вы можете обрабатывать методы HTTP GET и HTTP POST. Вы также можете использовать встроенную в Django обработку форм, чтобы сделать это намного проще.
Новый create_template.html
...
<form action="create_template" method="GET">
{% csrf_token %}
<h1>Create your template</h1>
<div class="item">
<table>
{{ form.as_table }}
</table>
</div>
<div class="btn-block">
<input type="button" type="submit" value="Create and Download!"/>
</div>
</form>
...
Новое содержание файла views.py
from django.forms import Forn, CharField, ChoiceField, IntegerField,
...
class TemplateForm(Form):
name = CharField(label='Doc name')
choices=[('1', 'Russia'), ('2', 'Germany'), ('3', 'France'),
('4', 'Armenia'), ('5', 'USA')]
country = ChoiceField(label='name_sheet', initial='5', choices=choices)
choices = []
for year in range (2000, 2050):
choices.append( (year, year) )
year1 = ChoiceField(label='Starting Year', initial=2021, choices=choices)
year2 = ChoiceField(label='Ending Year', initial=2022, choices=choices)
columns = CharField(label='Column names')
def create_template(request):
if request.method == 'GET':
form = TemplateForm()
return render(request, 'my_app/create_template.html' form=form)
else:
form = TemplateForm(request.POST)
<use form inputs as needed>
...