質問編集履歴

3 誤字

grilled_python

grilled_python score 217

2018/06/23 14:30  投稿

django viewsで処理したcontextの値をテンプレート以外で使いたい。
下記のコードで3つの変数がテンプレートで使用できるようになりました。
context['search_keywords']
context['search_count']
context['google_results']
その内google_resultsにはURLのリストが入っています。
そのリストを他のファイルで受け取りたいのですがうまくいきません。
contextはどの他のファイルからはどのようにして参照すればいいでしょうか?
contextは他のファイルからはどのようにして参照すればいいでしょうか?
同じプロジェクト内のdjangoではないファイルです。
views.py
```python
from django.shortcuts import render
from django.views.generic import TemplateView
from bs4 import BeautifulSoup
import requests
import re
from googlesearch import search
class IndexView(TemplateView):
   template_name = 'main/index.html'
   def get_context_data(self, **kwargs):
       context = super().get_context_data(**kwargs) # はじめに継承元のメソッドを呼び出す
       context['search_keywords'] = self.request.GET.get('search_keywords')
       context['search_count'] = self.request.GET.get('search_count')
       context['google_results'] = self.google_search(self.request.GET.get('search_keywords'), self.request.GET.get('search_count'))
       return context
   def google_search(self,query,page):
       """1ページ10件、stop=2で20件の検索結果を返す"""
       results = search(query, lang='jp', stop=int(page), pause=2.0, user_agent='Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25')
       g =[]
       for x in results:
           g.append(x)
       return g
```
受け取りたいファイル
aficrawl2.py
こちらはスクレイピング用のファイルで同じプロジェクト内にあります。
こちらでリストのURLを受け取りたいです。。
```python
# -*- coding: utf-8 -*-
import scrapy
class BlogSpider(scrapy.Spider):
   name = 'blogspider' # Spider の 名前。 # クロール を 開始 する URL の リスト。
   start_urls = ['ここにリストを受け取りたい']
   def parse(self, response):
       """ トップページ から カテゴリ ページ への リンク を 抜き出し て たどる。 """
       i = {}
       i['title'] = response.xpath('//title/text()').extract_first()
       i['description'] = response.xpath('/html/head/meta[@name="description"]/@content').extract_first()
       i['h1'] = response.xpath('//h1/text()').extract()
       i['h2'] = response.xpath('//h2/text()').extract()
       i['h3'] = response.xpath('//h3/text()').extract()
       i['h4'] = response.xpath('//h4/text()').extract()
       i['h5'] = response.xpath('//h5/text()').extract()
       i['h6'] = response.xpath('//h6/text()').extract()
       yield i
```
```python
from afiscrapy.main.views import IndexView
============================
if __name__=='__main__':
   results = IndexView.get_context_data()
   start_urls = results['google_results']
   print(results['google_results'])
```
IndexViewをインポートしてきてget_context_data()を呼び出せば、
context['google_results']を扱えるかと思いましたが、
ModuleNotFoundError: No module named 'afiscrapy'
モジュールが見つかりません。
ディレクトリツリー
![ディレクトリツリー](e3cec35e091d5fddb72cf3f57ad3cb1d.png)
よろしくお願いいたします。
  • Django

    2591 questions

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

  • Python 3.x

    14302 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

2 修正

grilled_python

grilled_python score 217

2018/06/23 14:29  投稿

django viewsで処理したcontextの値を他のファイルで受け取りたい。
django viewsで処理したcontextの値をテンプレート以外で使いたい。
viewsで処理した値をスクレイピングをするscrapyのファイルに受け渡したいです。
下記のコードで3つの変数がテンプレートで使用できるようになりました。
context['search_keywords']
context['search_count']
context['google_results']
その内google_resultsにはURLのリストが入っています。
テンプレートからGETで受け取った文字列をviewsで処理します。
その結果をget_context_detaでcontextに格納します。
context['google_results']の中身はURLのリストです。
そのリストを他のファイルで受け取りたいのですがうまくいきません。
contextはどの他のファイルからはどのようにして参照すればいいでしょうか?
同じプロジェクト内のdjangoではないファイルです。
views.py
```python
from django.shortcuts import render
from django.views.generic import TemplateView
from bs4 import BeautifulSoup
import requests
import re
from googlesearch import search
class IndexView(TemplateView):
   template_name = 'main/index.html'
   def get_context_data(self, **kwargs):
       context = super().get_context_data(**kwargs) # はじめに継承元のメソッドを呼び出す
       context['search_keywords'] = self.request.GET.get('search_keywords')
       context['search_count'] = self.request.GET.get('search_count')
       context['google_results'] = self.google_search(self.request.GET.get('search_keywords'), self.request.GET.get('search_count'))
       return context
   def google_search(self,query,page):
       """1ページ10件、stop=2で20件の検索結果を返す"""
       results = search(query, lang='jp', stop=int(page), pause=2.0, user_agent='Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25')
       g =[]
       for x in results:
           g.append(x)
       return g
```
受け取りたいファイル
aficrawl2.py
こちらはスクレイピング用のファイルでdjangoプロジェクト内にあります。
こちらはスクレイピング用のファイルで同じプロジェクト内にあります。
こちらでリストのURLを受け取りたいです。。
```python
# -*- coding: utf-8 -*-
import scrapy
class BlogSpider(scrapy.Spider):
   name = 'blogspider' # Spider の 名前。 # クロール を 開始 する URL の リスト。
   start_urls = ['ここにリストを受け取りたい']
   def parse(self, response):
       """ トップページ から カテゴリ ページ への リンク を 抜き出し て たどる。 """
       i = {}
       i['title'] = response.xpath('//title/text()').extract_first()
       i['description'] = response.xpath('/html/head/meta[@name="description"]/@content').extract_first()
       i['h1'] = response.xpath('//h1/text()').extract()
       i['h2'] = response.xpath('//h2/text()').extract()
       i['h3'] = response.xpath('//h3/text()').extract()
       i['h4'] = response.xpath('//h4/text()').extract()
       i['h5'] = response.xpath('//h5/text()').extract()
       i['h6'] = response.xpath('//h6/text()').extract()
       yield i
```
```python
from afiscrapy.main.views import IndexView
============================
if __name__=='__main__':
   results = IndexView.get_context_data()
   start_urls = results['google_results']
   print(results['google_results'])
```
IndexViewをインポートしてきてget_context_data()を呼び出せば、
context['google_results']を扱えるかと思いましたが、
ModuleNotFoundError: No module named 'afiscrapy'
モジュールが見つかりません。
ディレクトリツリー
![ディレクトリツリー](e3cec35e091d5fddb72cf3f57ad3cb1d.png)
よろしくお願いいたします。
  • Django

    2591 questions

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

  • Python 3.x

    14302 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1 修正

grilled_python

grilled_python score 217

2018/06/23 12:22  投稿

django viewsで処理したcontextの値を他のファイルで受け取りたい。
viewsで処理した値をスクレイピングをするscrapyのファイルに受け渡したいです。
テンプレートからGETで受け取った文字列をviewsで処理します。
その結果をget_context_detaでcontextに格納します。
context['google_results']の中身はURLのリストです。
views.py
```python
from django.shortcuts import render
from django.views.generic import TemplateView
from bs4 import BeautifulSoup
import requests
import re
from googlesearch import search
class IndexView(TemplateView):
   template_name = 'main/index.html'
   def get_context_data(self, **kwargs):
       context = super().get_context_data(**kwargs) # はじめに継承元のメソッドを呼び出す
       context['search_keywords'] = self.request.GET.get('search_keywords')
       context['search_count'] = self.request.GET.get('search_count')
       context['google_results'] = self.google_search(self.request.GET.get('search_keywords'), self.request.GET.get('search_count'))
       return context
   def google_search(self,query,page):
       """1ページ10件、stop=2で20件の検索結果を返す"""
       results = search(query, lang='jp', stop=int(page), pause=2.0, user_agent='Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25')
       g =[]
       for x in results:
           g.append(x)
       return g
```
受け取りたいファイル
aficrawl2.py
こちらはスクレイピング用のファイルでdjangoプロジェクト内にあります。
こちらでリストのURLを受け取りたいです。。
```python
# -*- coding: utf-8 -*-
import scrapy
class BlogSpider(scrapy.Spider):
   name = 'blogspider' # Spider の 名前。 # クロール を 開始 する URL の リスト。
   start_urls = ['ここにリストを受け取りたい']
   def parse(self, response):
       """ トップページ から カテゴリ ページ への リンク を 抜き出し て たどる。 """
       i = {}
       i['title'] = response.xpath('//title/text()').extract_first()
       i['description'] = response.xpath('/html/head/meta[@name="description"]/@content').extract_first()
       i['h1'] = response.xpath('//h1/text()').extract()
       i['h2'] = response.xpath('//h2/text()').extract()
       i['h3'] = response.xpath('//h3/text()').extract()
       i['h4'] = response.xpath('//h4/text()').extract()
       i['h5'] = response.xpath('//h5/text()').extract()
       i['h6'] = response.xpath('//h6/text()').extract()
       yield i
```
```python  
from afiscrapy.main.views import IndexView  
 
============================  
if __name__=='__main__':  
   results = IndexView.get_context_data()  
   start_urls = results['google_results']  
   print(results['google_results'])  
 
 
```  
IndexViewをインポートしてきてget_context_data()を呼び出せば、  
context['google_results']を扱えるかと思いましたが、  
 
ModuleNotFoundError: No module named 'afiscrapy'  
モジュールが見つかりません。  
 
 
ディレクトリツリー
![ディレクトリツリー](e3cec35e091d5fddb72cf3f57ad3cb1d.png)
よろしくお願いいたします。
  • Django

    2591 questions

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

  • Python 3.x

    14302 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る