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

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

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

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

Python

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

Q&A

1回答

4889閲覧

djangoでリンクを貼りたい

yokoyama_takuzo

総合スコア19

Django

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

Python

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

0グッド

0クリップ

投稿2019/04/07 15:19

編集2019/04/07 15:45

Windows 10
Python 3.7.3

Djangoでリンクの設定をしたいのですが、これらを書いた後にpython manage.py runserverでサーバーを動かそうとするとエラーが表示されサーバーが動きません。

Python

1views.py 2 3def index(request): 4 return render(request,'index.html') 5 6def hello(request): 7 return render(request, 'hello.html') 8 9 10project/urls.py 11 12from django.conf.urls import url 13 14urlpatterns = [ 15 path('admin/', admin.site.urls), 16 path('', include('app.urls')) 17 18 url('', include(('app.urls', 'hello'), namespace='hello')), 19] 20 21 22app/urls.py 23 24from django.conf.urls import url 25 26urlpatterns = [ 27 path('', views.index, name='index'), 28 29 url('', view.hello, name='hello'), 30] 31 32 33index.html 34 35<a href="{% url 'hello:hello' %}">Hello World!</a> 36 37<a href="{% url 'hello' %}">Hello World!</a> 38

これらを書かなければサーバーは動きます。

何か書き方がおかしいのでしょうか?

やりたい事はシンプルにリンクを貼りたいだけです。

今の状態はindex.htmlと同じ階層にhello.htmlが入っています。

project\app\templates\hello.html

テラテイルやいろんなサイトを見たのですがなかなか解決が出来ずに困っています。

app/urls.pyを使わずにproject/urls.pyに直接

Python

1path('', views.hello, name='hello'),

と書いたりしても動かず、この部分にSyntaxError: invalid syntaxというエラーが出ています。

何か書き方がおかしいのだと思います。

試しに

Python

1url('', include(('app.urls', 'hello'), namespace='hello')),

と書いても表示されません。

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

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

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

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

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

guest

回答1

0

以下のように各urls.pyを変更して試してみてください。
これは自分の方法ですので他のやり方も当然あると思います。

python

1project/urls.py 2 3from django.urls import path 4 # pathをimportするだけで十分です。 5 6urlpatterns = [ 7 path('admin/', admin.site.urls), 8 path('', include('app.urls')), 9 # includeを使う場合はnamespaceは子urls.pyで定義する 10 # urlpatterns内はpathを書くだけでやりたいことは実現できます。 11 # 逆にurlを入れる方法を私は知りません。勉強不足なだけかもしれませんが。 12 13]

python

1app/urls.py 2 3from django.urls import path 4 5app_name ="hello" #point 6 # これがproject.urlsのnamespaceの役割を果たします。 7 8urlpatterns = [ 9 path('', views.index, name='index'), 10]

hoge.htmlの編集

html

1<a href="{% url 'hello:index' %}">HOGE</a>

こんな感じで書いてみてください。
今回はurlpatternsの中に書くべきものをpathだけにすること。
親urls.pyの場合はincludeを使いnamespaceは子urls.pyにてapp_nameを使い定義する。
これがポイントだと思います。

投稿2019/04/07 21:15

編集2019/04/07 21:28
chapin

総合スコア80

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

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

yokoyama_takuzo

2019/04/08 06:33

回答ありがとうございます! そうするとこの次からまた別のリンクを足す場合には、 どのように足していけばいいかお分かりになりますでしょうか? 例えばservice.htmlやprice.htmlというファイルがまだ別にあって、そこまで飛ばす書き方が分からずで困っています。 Djangoはインターネット上で情報を探すのが難しくて、もしくはいろいろと試してもエラーばかりで。 不慣れで申し訳ありません。
chapin

2019/04/08 08:19

ではゴールから逆算して考えてみましょう。 price.htmlに飛ばす。飛ばすためには先程作ったhoge.html内にprice.htmlにとばすリンクを作成することで解決できそうです。ではリンクの作り方ですが、今回は{% url "namespace:name" %}の形で作成します。リンクの書き方は他にもあります。これが楽だと思いますが、その他の方法はご自分でフォローしてください。リンクの要素としてnamespace,nameを定めなければなりませんね。namespaceはapp_nameとして、nameはpath内で共に子urls.py(app.urls.py)で定めることになりそうです。namespaceはproductsというアプリをpython manage.py startapp productsで作ることになると想像できます。 また子urls.pyに飛ばす親urls.pyもpathの追加が必要そうです。 ```python hoge.htmlにて <a href="{% url 'hello:index' %}">HOGE</a> <a href="{% url 'products:product' %}">gogogo</a> #新しく追加したprice.htmlはproductsに作るものとします。 ``` 親から子(productsアプリ)に通すパス ```python project/urls.py from django.urls import path # pathをimportするだけで十分です。 urlpatterns = [ path('admin/', admin.site.urls), path('', include('app.urls')), path('pro/', include("products.urls")), #追加 # path第一引数は,すでにあるものとかぶらないようにする。 ] ``` 子(productsアプリ)からviewsの関数に渡すpathを作成。 ここでnamespaceとnameを設定することがポイントです。 ```python products/urls.py from django.urls import path from .views import example app_name ="products" # これでhoge.htmlのnamespaceは準備できました。 urlpatterns = [ path('foo', example, name="product"), ] #これでnameの方も準備できました。 ``` あとは適当にproducts.views.pyでprice.htmlを渡す関数を書いてあげればokです。例えば、、、 ```python products.views.py from django.shortcuts import render def example(request): render(request, "products/price.html") ``` こんな感じの流れで考えなければなりません。なれると必要ありませんが。 今回かいたコードでurls.pyの関数呼び出しにエラーが出るかもしれません。 少し曖昧な部分があって頻繁に書き直すところです。。。もし出たら教えてください。 不明な所があれば質問よろしくおねがいします。
yokoyama_takuzo

2019/04/08 11:41

本当にとても親切に教えていただきありがとうございます! 本当に感謝しています。 ただ、今の私にはちょっと理解の難しい内容のようでして、また再度一から勉強をしなおさなければと考えています。 この度は本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問