如何在 Django 中 运行 像 class 这样的 python 脚本?
How to run a python script like class in 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
中应用包含在 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>
...
我对 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
中应用包含在 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>
...