質問編集履歴

2

タイトルの変更

2019/08/02 09:47

投稿

hiranohirano
hiranohirano

スコア33

test CHANGED
@@ -1 +1 @@
1
- django、Sitemapで複数のオブジェクトを渡したURLをしたい
1
+ django、Sitemapで複数のオブジェクトを渡したURLをしたい
test CHANGED
File without changes

1

sitemap.pyを変更。

2019/08/02 09:47

投稿

hiranohirano
hiranohirano

スコア33

test CHANGED
@@ -1 +1 @@
1
- django、Sitemapクラスitems()にオブジェクトを二つすことは可能でょうか?
1
+ django、Sitemapで複数のオブジェクトを渡したURLを渡したい
test CHANGED
@@ -94,9 +94,37 @@
94
94
 
95
95
 
96
96
 
97
+
98
+
99
+ views.py
100
+
101
+ ```
102
+
103
+ class AreaStoreList(ListView):
104
+
97
- itemsの中は色々試し、
105
+ model = Store
106
+
98
-
107
+ template_name = 'myapp/area_list.html'
108
+
109
+
110
+
111
+ def get_context_data(self, **kwargs):
112
+
113
+ context = super().get_context_data(**kwargs)
114
+
115
+ prefecture = self.kwargs.get('prefecture')
116
+
117
+ tag = self.kwargs.get('tag_id')
118
+
119
+ if tag:
120
+
121
+ context['tag'] = Tag.objects.get(pk=tag)
122
+
99
- 何か違うなーと思いながらも、リスト形式にして2つ渡せないかと思い、以下のコードにしてみました。
123
+ context['tags'] = Tag.objects.all()
124
+
125
+ context['prefecture'] = Prefecture.objects.get(url_name=prefecture)
126
+
127
+ ```
100
128
 
101
129
 
102
130
 
@@ -114,65 +142,65 @@
114
142
 
115
143
  def items(self):
116
144
 
117
- obj = {}
118
-
119
- obj['prefecture'] = Prefecture.objects.all()
145
+ return Prefecture.objects.all()
120
-
121
- obj['tag'] = Tag.objects.all()
146
+
122
-
123
- return obj
147
+
124
-
125
-
126
148
 
127
149
  def location(self, obj):
128
150
 
151
+ tags = Tag.objects.all()
152
+
153
+ url_list = []
154
+
155
+ for tag in tags:
156
+
157
+ if Store.objects.filter(prefecture=obj).filter(tags=tag).exists():
158
+
129
- return resolve_url('myapp:prefecture_tag', prefecture=obj['prefecture'].url_name, tag_id=obj['tag'].pk)
159
+ url_list += resolve_url('myapp:prefecture_tag', prefecture=obj.url_name , tag_id=tag.pk)
160
+
130
-
161
+ print(resolve_url('myapp:prefecture_tag', prefecture=obj.url_name , tag_id=tag.pk))
162
+
163
+ print(url_list)
164
+
165
+ return url_list
166
+
131
- ```
167
+ ```
132
-
133
-
134
-
168
+
135
- views.pyの中では、prefecture = self.kwargs.get('prefecture')のようにいたのでが、
169
+ このようにすると、print(resolve_url('myapp:prefecture_tag', prefecture=obj.url_name , tag_id=tag.pk))では、以下のように、思ったような結果が返っきま
136
-
137
- itemsの中では、同じようなことはできないようです。
170
+
138
-
139
-
140
-
141
- views.py
142
-
143
- ```
171
+ ```
144
-
145
- class AreaStoreList(ListView):
172
+
146
-
147
- model = Store
148
-
149
- template_name = 'myapp/area_list.html'
173
+ /hokkaido/store-list/tag/1/
150
-
151
-
152
-
153
- def get_context_data(self, **kwargs):
174
+
154
-
155
- context = super().get_context_data(**kwargs)
156
-
157
- prefecture = self.kwargs.get('prefecture')
175
+ /tochigi/store-list/tag/1/
158
-
176
+
159
- tag = self.kwargs.get('tag_id')
177
+ /tochigi/store-list/tag/2/
160
-
161
- if tag:
178
+
162
-
163
- context['tag'] = Tag.objects.get(pk=tag)
164
-
165
- context['tags'] = Tag.objects.all()
166
-
167
- context['prefecture'] = Prefecture.objects.get(url_name=prefecture)
168
-
169
- ```
179
+ ```
180
+
170
-
181
+ しかし、print(url_list)では、以下のように文字列がバラバラになって返ってきます。
182
+
171
-
183
+ ```
184
+
172
-
185
+ ['/', 'h', 'o', 'k', 'k', 'a', 'i', 'd', 'o', '/', 's', 't', 'o', 'r', 'e', '-', 'l', 'i', 's', 't', '/', 't', 'a', 'g', '/', '1', '/']
186
+
173
-
187
+ ```
188
+
174
-
189
+ よって、return url_listでも文字列がバラバラになったものが返ってきます。
190
+
191
+
192
+
193
+ そこで、以下のようにしてみたりもしましたが、tagのidが1のみに固定されたりして、うまい具合にできませんでした。
194
+
195
+ ```python
196
+
197
+ return resolve_url('myapp:prefecture_tag', prefecture=obj.url_name , tag_id=tag.pk)
198
+
199
+ ```
200
+
201
+
202
+
175
- items2つのオブジェクトを渡すことは可能でしょうか?
203
+ 冒頭書いたようにサイトマップを送信できるよう、複数のオブジェクトを渡すことは可能でしょうか?
176
204
 
177
205
  もしくは、それ以外の方法で、上記のURLを送信できるサイトマップを自動生成することは可能でしょうか?
178
206