teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

サンプル追加

2020/08/28 15:41

投稿

退会済みユーザー
answer CHANGED
@@ -21,4 +21,181 @@
21
21
  <a href="{% url 'delete' dic w.id %}">Delete</a>
22
22
  ```
23
23
 
24
- のような形になります。xxxx.htmlテンプレートを使用するviewで、オブジェクトのプロパティにdicを設定してあげることで、リンクに反映され、ルーティングで読み取られ、viewに渡ります。
24
+ のような形になります。xxxx.htmlテンプレートを使用するviewで、オブジェクトのプロパティにdicを設定してあげることで、リンクに反映され、ルーティングで読み取られ、viewに渡ります。
25
+
26
+ 一応前にコメントしたサンプルに引数langをダミーで加えたバージョンを付記しておきます。
27
+ ```bash
28
+ PYTHONCOMMAND="python3"
29
+ if ! command -v python3; then
30
+ PYTHONCOMMAND="python"
31
+ fi
32
+ $PYTHONCOMMAND -m venv env
33
+ . env/bin/activate
34
+ pip install --upgrade pip
35
+ pip install django==3.1
36
+ django-admin startproject mysite
37
+ cd mysite
38
+ django-admin startapp myapp
39
+ patch -p1 << __END_OF_TERMINAL_CODE__
40
+ diff --git a/myapp.WordDefinition.json b/myapp.WordDefinition.json
41
+ new file mode 100644
42
+ index 0000000..34d0aaa
43
+ --- /dev/null
44
+ +++ b/myapp.WordDefinition.json
45
+ @@ -0,0 +1,2 @@
46
+ +[{"model": "myapp.worddefinition", "pk": 1, "fields": {"word": "単語1", "definition": "単語1の定義"}}, {"model": "myapp.worddefinition", "pk": 2, "fields": {"word": "単語2", "definition": "単語2の定義"}}, {"model": "myapp.worddefinition", "pk": 3, "fields": {"word": "単語3", "definition": "単語3の定義"}}]
47
+ +
48
+ diff --git a/myapp/admin.py b/myapp/admin.py
49
+ index 8c38f3f..85d969d 100644
50
+ --- a/myapp/admin.py
51
+ +++ b/myapp/admin.py
52
+ @@ -1,3 +1,7 @@
53
+ +"""
54
+ +admin.py
55
+ +"""
56
+ from django.contrib import admin
57
+ +from .models import WordDefinition
58
+
59
+ -# Register your models here.
60
+ +admin.site.register(WordDefinition)
61
+ diff --git a/myapp/models.py b/myapp/models.py
62
+ index 71a8362..cd2b051 100644
63
+ --- a/myapp/models.py
64
+ +++ b/myapp/models.py
65
+ @@ -1,3 +1,11 @@
66
+ +"""
67
+ +models.py
68
+ +"""
69
+ from django.db import models
70
+
71
+ -# Create your models here.
72
+ +class WordDefinition(models.Model):
73
+ + """
74
+ + Word and its Definition
75
+ + """
76
+ + word = models.CharField('単語', max_length=200, unique=True, null=False)
77
+ + definition = models.CharField('定義', max_length=1024, null=False)
78
+ diff --git a/myapp/templates/myapp/index.html b/myapp/templates/myapp/index.html
79
+ new file mode 100644
80
+ index 0000000..a76e60d
81
+ --- /dev/null
82
+ +++ b/myapp/templates/myapp/index.html
83
+ @@ -0,0 +1,24 @@
84
+ +<!DOCTYPE html>
85
+ +<html lang="ja">
86
+ +
87
+ +<head>
88
+ + <meta charset="utf-8">
89
+ +</head>
90
+ +
91
+ +<body>
92
+ + {% if all_words %}
93
+ + <table class="table table-bordered">
94
+ + {% for w in all_words %}
95
+ + <tr>
96
+ + <td><a>{{ w.word }}</a></td>
97
+ + <td><a>{{ w.definition }}</a></td>
98
+ + <td style="text-align: center;">
99
+ + <a href="{% url 'delete' lang w.id %}">Delete</a>
100
+ + </td>
101
+ + </tr>
102
+ + {% endfor %}
103
+ + </table>
104
+ + {% endif %}
105
+ +</body>
106
+ +
107
+ +</html>
108
+
109
+ diff --git a/myapp/urls.py b/myapp/urls.py
110
+ new file mode 100644
111
+ index 0000000..5e7a908
112
+ --- /dev/null
113
+ +++ b/myapp/urls.py
114
+ @@ -0,0 +1,10 @@
115
+ +"""
116
+ +urls.py
117
+ +"""
118
+ +from django.urls import path
119
+ +from . import views
120
+ +
121
+ +urlpatterns = [
122
+ + path('', views.index, name='index'),
123
+ + path('delete/<lang>/<word_id>', views.delete, name = 'delete')
124
+ +]
125
+ diff --git a/myapp/views.py b/myapp/views.py
126
+ index 91ea44a..6e68633 100644
127
+ --- a/myapp/views.py
128
+ +++ b/myapp/views.py
129
+ @@ -1,3 +1,25 @@
130
+ +"""
131
+ +View
132
+ +"""
133
+ from django.shortcuts import render
134
+ +from django.http import HttpResponse
135
+ +from django.urls import reverse
136
+ +from .models import WordDefinition
137
+
138
+ -# Create your views here.
139
+ +def index(request):
140
+ + """
141
+ + list words and links for deletion.
142
+ + """
143
+ + words = WordDefinition.objects.all()
144
+ + return render(request, 'myapp/index.html', {"all_words": words, "lang": "hoge"})
145
+ +
146
+ +def delete(request, lang, word_id):
147
+ + """
148
+ + delete the specified word.
149
+ + """
150
+ + word = WordDefinition.objects.get(id=word_id)
151
+ + word.delete()
152
+ +
153
+ + return HttpResponse('<div>Word Has Been Deleted!</div>'\
154
+ + '<div><a href="{url}">back to index</a>{lang}</div>'
155
+ + .format(url=reverse('index'), lang=lang))
156
+ diff --git a/mysite/settings.py b/mysite/settings.py
157
+ index 5680ac4..20a2808 100644
158
+ --- a/mysite/settings.py
159
+ +++ b/mysite/settings.py
160
+ @@ -31,6 +31,7 @@ ALLOWED_HOSTS = []
161
+ # Application definition
162
+
163
+ INSTALLED_APPS = [
164
+ + 'myapp.apps.MyappConfig',
165
+ 'django.contrib.admin',
166
+ 'django.contrib.auth',
167
+ 'django.contrib.contenttypes',
168
+ @@ -103,9 +104,9 @@ AUTH_PASSWORD_VALIDATORS = [
169
+ # Internationalization
170
+ # https://docs.djangoproject.com/en/3.1/topics/i18n/
171
+
172
+ -LANGUAGE_CODE = 'en-us'
173
+ +LANGUAGE_CODE = 'ja-jp'
174
+
175
+ -TIME_ZONE = 'UTC'
176
+ +TIME_ZONE = 'Asia/Tokyo'
177
+
178
+ USE_I18N = True
179
+
180
+ diff --git a/mysite/urls.py b/mysite/urls.py
181
+ index e7f9f35..b41a8b1 100644
182
+ --- a/mysite/urls.py
183
+ +++ b/mysite/urls.py
184
+ @@ -14,8 +14,9 @@ Including another URLconf
185
+ 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
186
+ """
187
+ from django.contrib import admin
188
+ -from django.urls import path
189
+ +from django.urls import path, include
190
+
191
+ urlpatterns = [
192
+ + path('myapp/', include('myapp.urls')),
193
+ path('admin/', admin.site.urls),
194
+ ]
195
+ __END_OF_TERMINAL_CODE__
196
+ python manage.py makemigrations
197
+ python manage.py migrate
198
+ python manage.py loaddata myapp.WordDefinition.json
199
+ python manage.py runserver
200
+
201
+ ```