使用用户输入填充和下载docx文件

时间:2014-09-25 06:22:59

标签: python django docx

我无法将用户的名称从数据库传递到views.py中的docx文件

我正在尝试实施以下内容:

1-用户输入姓名,提交,重定向到

带下载按钮的

2-页面。点击后,

使用用户名作为文件名生成3- docx文件。

这是我拥有的

models.py

class Booking(models.Model):
    name = models.CharField(max_length=255)

views.py

class BookingView(ListView):
    model = Booking
    template_name = "docbuilder/doc_maker.html"
    doc = Document()
    doc.add_paragraph('this_is_where_name_should_go')
    doc.save('this_is_also_where_name_should_go.docx')
    template = 'docbuilder/doc_maker.html'

doc_maker.html

{% extends 'base.html' %}

{% block content %}

     <form action="" method="POST">{% csrf_token %}
        <select>
            {% for i in object_list %}
          <option value="{{ i.name }}">{{ i.name }}</option>
            {% endfor %}
        </select>

        <input type="submit" value="Download">
    </form>
{% endblock %}

1 个答案:

答案 0 :(得分:1)

以下是填充docx字段的解决方案。

我会尽快更新下载功能。

我的解决方案

<强>模型

class Booking(models.Model):
    name = models.CharField(max_length=255)

观看次数1

显示文本字段并存储名称

class BookingCreate(CreateView):
    model = Booking
    success_url = 'docbuilder/download.html'

<强>形式

创建包含所有存储名称的下拉菜单

class DocForm(forms.Form):
    name = forms.ModelChoiceField(queryset=Booking.objects.all().order_by('name'))

观点2

显示包含存储名称的下拉菜单,并使用所选数据创建docx并将其存储在本地

def BookingView(request):
    form = DocForm()
    if request.method == "POST":
        form = DocForm(request.POST)
        if form.is_valid():
            name = form.cleaned_data['name']
            doc = Document()
            doc.add_paragraph('It worked!')
            doc.save(('{0}.docx').format(name))
            return HttpResponseRedirect('congrats.html')
    return render(request, 'docbuilder/doc_maker.html',{'form': form })

<强>模板

 <form action="" method="POST">{% csrf_token %}
     {{ form.as_p }}
     <input type="submit" value="Download">
 </form>