質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

4776閲覧

djangoでAttribute Error

imamoto_browser

総合スコア1161

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/03/17 05:17

django1.11.8でアプリをqiita記事を参考に作っていますが、下記エラーが解消できないでいます。

AttributeError at /

Generic detail view FooPDFView must be called with either an object pk or a slug.

views.py

python

1 2 2 from __future__ import unicode_literals 3 3 4 4 # -*- coding: utf-8 -*- 5 5 import io 6 6 import os 7 7 from django.conf import settings 8 8 from django.views import generic 9 9 from django.http import HttpResponse 10 10 from django.template.loader import get_template 11 11 from xhtml2pdf import pisa 12 12 13 13 from django.shortcuts import render 14 14 from .models import Article 15 15 16 16 # Create your views here. 17 17 18 18 class FooPDFView(generic.DetailView): 19 19 model = Article 20 20 template_name = 'blog/pdf.html' 21 21 22 22 def render_to_response(self, context): 23 23 html = get_template(self.template_name).render(self.get_context_data()) 24 24 result = io.BytesIO() 25 25 pdf = pisa.pisaDocument( 26 26 io.BytesIO(html.encode('utf-8')), 27 27 result, 28 28 link_callback=link_callback, 29 29 encoding='utf-8', 30 30 ) 31 31 32 32 if not pdf.err: 33 33 return HttpResponse( 34 34 result.getvalue(), 35 35 content_type='application/pdf' 3636 ) 37 37 38 38 return HttpResponse('<pre>%s</pre>' % escape(html)) 39 39 40 40 def link_callback(uri, rel): 41 41 sUrl = settings.STATIC_URL 42 42 43 43 if not os.path.isFile(path): 44 44 raise Exception( 45 45 '%s must start with %s' % \ 46 46 (uri, sUrl) 47 47 ) 48 48 49 49 return path 50 50 51 51 52 52 def post_list(request): 53 53 return render(request, 'blog/post_list.html', {}) 54

urls.py

python

1 1 from django.conf.urls import include, url 2 2 from . import views 3 3 4 4 app_name = 'blog' 5 5 6 6 urlpatterns = [ 7 7 url(r'^$', views.FooPDFView.as_view(), name='pdf'), 8 8 ]

#やってみたこと
ググると、slug_fieldをセットしなさいのような回答があるのですが、上記のとおり現状正規表現を使った複雑なURLを設定してないのですが、http://localhost:8000/にアクセスしてpdfを出力するようにしたいのですがどのように改修すべきでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

qiitaの記事の urls.py と書いてある内容が違うのが問題です。DetailViewは、pk(つまりArticle.id) をキーにして対象のレコードを取得して、それを表示するviewです。なのでurls.pyに書くときは、pkというパラメータを受け取るように設定する必要があります。

urlpatterns = [ # urlパスの中でpkが受け取れるようにする url(r'^(?P<pk>[0-9]+)/$',views.FooPDFView.as_view(), name='pdf'), ]

投稿2018/03/18 15:51

編集2018/03/18 15:51
tell_k

総合スコア2120

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問