相关疑难解决方法(0)

对象不支持项目分配错误

在我views.py保存表单之前我分配值.我过去常常这样做:

projectForm.lat = session_results['lat']
projectForm.lng = session_results['lng']
Run Code Online (Sandbox Code Playgroud)

现在,由于变量列表中有一点长,我想遍历session_results与下面的循环(如亚当描述这里):

for k,v in session_results.iteritems():
    projectForm[k] = v
Run Code Online (Sandbox Code Playgroud)

但是我得到'Project' object does not support item assignment了循环解决方案的错误.我很难理解为什么.Project是模型类,我用于ModelForm.

谢谢您的帮助!

python django dictionary loops

47
推荐指数
2
解决办法
8万
查看次数

Django下载文件

我是使用Django的新手,我正在尝试开发一个用户可以上传大量excel文件的网站,然后将这些文件存储在媒体文件夹Webproject/project/media中.

def upload(request):
    if request.POST:
        form = FileForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return render_to_response('project/upload_successful.html')
    else:
        form = FileForm()
    args = {}
    args.update(csrf(request))
    args['form'] = form

    return render_to_response('project/create.html', args)
Run Code Online (Sandbox Code Playgroud)

然后,文档将与列表中的任何其他文档一起显示在列表中,您可以单击该文档,它将显示有关它们的基本信息以及它们已上载的文件的名称.从这里我希望能够使用以下链接再次下载相同的excel文件:

 <a  href="/project/download"> Download Document </a>
Run Code Online (Sandbox Code Playgroud)

我的网址是

 urlpatterns = [

              url(r'^$', ListView.as_view(queryset=Post.objects.all().order_by("-date")[:25],
                                          template_name="project/project.html")),
              url(r'^(?P<pk>\d+)$', DetailView.as_view(model=Post, template_name="project/post.html")),
              url(r'^upload/$', upload),
              url(r'^download/(?P<path>.*)$', serve, {'document root': settings.MEDIA_ROOT}),

          ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)

但是我得到了错误,serve()得到了一个意外的关键字参数'document root'.谁能解释如何解决这个问题?

要么

说明如何使用上传的文件进行选择和提供

def download(request):
    file_name = #get the filename of desired excel file
    path_to_file = #get the path of desired excel file …
Run Code Online (Sandbox Code Playgroud)

python django

31
推荐指数
4
解决办法
6万
查看次数

在Django中流式传输CSV文件

我正在尝试将csv文件作为附件下载流式传输.CSV文件大小为4MB或更多,我需要一种方法让用户主动下载文件,而无需等待创建所有数据并首先提交到内存.

我首先使用自己的基于Django FileWrapper类的文件包装器.那失败了.然后我在这里看到了一个使用生成器来传输响应的方法: 如何使用Django流式传输HttpResponse

当我在生成器中引发错误时,我可以看到我正在使用该get_row_data()函数创建正确的数据,但是当我尝试返回响应时它返回空.我也禁用了Django GZipMiddleware.有谁知道我做错了什么?

编辑:我遇到的问题是ConditionalGetMiddleware.我不得不更换它,代码在下面的答案中.

这是观点:

from django.views.decorators.http import condition

@condition(etag_func=None)
def csv_view(request, app_label, model_name):
    """ Based on the filters in the query, return a csv file for the given model """

    #Get the model
    model = models.get_model(app_label, model_name)

    #if there are filters in the query
    if request.method == 'GET':
        #if the query is not empty
        if request.META['QUERY_STRING'] != None:
            keyword_arg_dict = {}
            for key, value in request.GET.items():
                #get the query filters …
Run Code Online (Sandbox Code Playgroud)

python csv django streaming

18
推荐指数
2
解决办法
2万
查看次数

如何使用excel格式导出python中的数据?

views.py

def export_to_excel(request):

    lists = MyModel.objects.all()

    # your excel html format
    template_name = "sample_excel_format.html"

    response = render_to_response(template_name, {'lists': lists})

    # this is the output file
    filename = "model.csv"

    response['Content-Disposition'] = 'attachment; filename='+filename
    response['Content-Type'] = 'application/vnd.ms-excel; charset=utf-16'
    return response
Run Code Online (Sandbox Code Playgroud)

urls.py

from django.conf.urls.defaults import *

urlpatterns = patterns('app_name.views',
   url(r'^export/$', 'export_to_excel', name='export_to_excel'),  
)
Run Code Online (Sandbox Code Playgroud)
  1. 最后,在您的页面中创建一个指向导出的按钮或链接.

page.html中

<a href="{% url app_name:export_to_excel %}">Export</a>
Run Code Online (Sandbox Code Playgroud)

什么都没有获取文件选项下载,没有给出任何错误,但我可以看到所有结果在日志中工作正常.

python django

5
推荐指数
2
解决办法
1万
查看次数

标签 统计

django ×4

python ×4

csv ×1

dictionary ×1

loops ×1

streaming ×1