Ответы пользователя по тегу Django
  • Как сделать рендер генерированной html страницы в pdf в Django?

    Всем доброго дня, года 3 назад, тоже приходилось решать такую проблему, решил ее с использованием xhtml2pdf. Как сейчас обстоит дело с данным пакетом, сказать не могу.
    from django.template.loader import get_template
    from django.template import Context, RequestContext
    import xhtml2pdf.pisa as pisa
    import cStringIO as StringIO
    import cgi
    
    def render_to_pdf(template_src, context_dict, name_file):
        template = get_template(template_src)
        context = Context(context_dict)
        html = template.render(context)
        result = StringIO.StringIO()
        pdf = pisa.CreatePDF(StringIO.StringIO(html.encode("UTF-8")), result, encoding='UTF-8')
        if not pdf.err:
            # return http.HttpResponse(result.getvalue(), mimetype='application/pdf')
            response = HttpResponse(result.getvalue(), content_type='application/pdf')
            response['Content-Disposition'] = 'attachment; filename="' + name_file + '.pdf"'
            return response
    
        return http.HttpResponse(('We had some errors<pre>%s</pre>' % cgi.escape(html)))
    
    def ajax_post(request, slug):
        if request.POST:
            query_text = request.POST["data"].encode("UTF-8")
            title = Document.objects.get(slug=slug).title
    
            return render_to_pdf('documents/entries1.html', {
                'pagesize': 'A4',
                'title': title,
                'test': query_text
            }, slug)
        else:
            return redirect('documents-create', slug=slug)


    Шаблон родитель pdf.html
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>My Title</title>
            <style type="text/css">
                @page {
                    size: {{ pagesize }};
                    margin: 1cm;
                    @frame footer {
                        -pdf-frame-content: footerContent;
                        bottom: 0cm;
                        margin-left: 9cm;
                        margin-right: 9cm;
                        height: 1cm;
                    }
                }
                @font-face {
                    font-family: "Open Sans";
                    src: url("//mozorg.cdn.mozilla.net/media/fonts/OpenSans-Regular-webfont.eot?#iefix") format("embedded-opentype"), url("//mozorg.cdn.mozilla.net/media/fonts/OpenSans-Regular-webfont.woff") format("woff"), url("//mozorg.cdn.mozilla.net/media/fonts/OpenSans-Regular-webfont.ttf") format("truetype"), url("//mozorg.cdn.mozilla.net/media/fonts/OpenSans-Regular-webfont.svg#svgFontName") format("svg");
                }
                @font-face {
                    font-family: "Open Sans";
                    font-weight: 600;
                    src: url("//mozorg.cdn.mozilla.net/media/fonts/OpenSans-Semibold-webfont.eot?#iefix") format("embedded-opentype"), url("//mozorg.cdn.mozilla.net/media/fonts/OpenSans-Semibold-webfont.woff") format("woff"), url("//mozorg.cdn.mozilla.net/media/fonts/OpenSans-Semibold-webfont.ttf") format("truetype"), url("//mozorg.cdn.mozilla.net/media/fonts/OpenSans-Semibold-webfont.svg#svgFontName") format("svg");
                }
                @font-face {
                    font-family: "Open Sans";
                    font-weight: bold;
                    src: url("//mozorg.cdn.mozilla.net/media/fonts/OpenSans-Bold-webfont.eot?#iefix") format("embedded-opentype"), url("//mozorg.cdn.mozilla.net/media/fonts/OpenSans-Bold-webfont.woff") format("woff"), url("//mozorg.cdn.mozilla.net/media/fonts/OpenSans-Bold-webfont.ttf") format("truetype"), url("//mozorg.cdn.mozilla.net/media/fonts/OpenSans-Bold-webfont.svg#svgFontName") format("svg");
                }
                @font-face {
                    font-family: "Open Sans Light";
                    src: url("//mozorg.cdn.mozilla.net/media/fonts/OpenSans-Light-webfont.eot?#iefix") format("embedded-opentype"), url("//mozorg.cdn.mozilla.net/media/fonts/OpenSans-Light-webfont.woff") format("woff"), url("//mozorg.cdn.mozilla.net/media/fonts/OpenSans-Light-webfont.ttf") format("truetype"), url("//mozorg.cdn.mozilla.net/media/fonts/OpenSans-Light-webfont.svg#svgFontName") format("svg");
                }
                body {
                    color: #484848;
                    font-family: 'Open Sans',Arial,Helvetica,sans-serif;
                    font-size: 14px;
                    text-align: left;
                    line-height: 1.5em;
    }
    
            </style>
        </head>
        <body>
            <div>
                {{ mylist|safe }}
            </div>
            <div id="footerContent">
                {%block page_foot%}
                    Page <pdf:pagenumber>
                {%endblock%}
            </div>
        </body>
    </html>

    Шаблон в который передаем данные entries1.html
    {% extends "pdf.html" %}
    
    {% block title %}{{ title }}{% endblock %}
    
    {% block content %}
          {{ test|safe }}
    {% endblock %}
    
    {%block page_foot%}
        я страница {{block.super}}
    {%endblock%}
    Ответ написан
  • Исправить ошибку при настройке uWSGI?

    Добрый вечер, а что пишет в логах uwsgi? У была такая же беда, пришлось не использовать sock
    Переделал настройки именно так, скидываю из одного рабочего проекта
    Настройки uwsgi, установлен как модуль виртуального окружения через pip
    [uwsgi]
    plugins = /home/web/bin/python3.3
    pythonpath = /home/web/lib/python3.3/site-packages/
    virtualenv = /home/web/
    chdir = /home/web/app/
    master = true
    env = DJANGO_SETTINGS_MODULE=app.settings
    module = django.core.handlers.wsgi:WSGIHandler()
    max-requests=1000
    socket = 127.0.0.1:8080
    enable-threads=true

    настройки nginx
    server{
          listen 80;
    
          server_name domen.ru
    
          access_log /home/web/logs/access.log;
          error_log  /home/web/logs/error.log;
    
          location /static/ {
            alias   /home/web/static/;
          }
    
    
          location /favicon.ico {
            alias /home/web/static/favicon.ico;
          }
    
          location / {
            #uwsgi_pass   unix:///home/web/socket.sock;
            uwsgi_pass   127.0.0.1:8080;
            include      uwsgi_params;
          }
    }
    Ответ написан