django1.9+xadmin 테마 설정 실패 해결 방법

7563 단어 djangoxadmin
환경:python 2.7django 1.9xadmin은 프로젝트에 소스 코드로 도입하여 xadmin이 사용하는 과정에서 "use bootswatch = True"를 설정하여 테마 메뉴를 조정하여 더 많은 테마를 표시하려고 합니다.그러나 설정한 후에 테마가 기본값과bootstrap2인 것을 발견하고 원본 코드를 깊이 추적하여/xadmin/plugins/themes를 발견합니다.py하의
block_top_navmenu

방법,usebootswatch가 True일 때 httplib2를 사용합니다
http://bootswatch.com/api/3.json

웹 사이트에서 테마 메뉴 항목을 가져옵니다.그러나 브라우저로 이 사이트를 열면 http는https로 바뀐다.httplib2가 이https의 주소를 방문하면 오류가 발생합니다.오류 메시지는 다음과 같습니다.
[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure 

그런데 이게 오보예요. 왜 그런지 모르겠어요. 백스테이지에 안 나와서...
httplib2가 이 사이트에 접근했을 때, 나는 시험에 성공하지 못했기 때문에, 나는 httplib2를 대체하기 위해 Requests 라이브러리를 사용했다.1. Requests 설치
pip install requests

2./xadmin/plugins/themes.py 리퀘스트 도입
import requests

3. Block 수정top_navmenu 방법:
    def block_top_navmenu(self, context, nodes):

        themes = [
            {'name': _(u"Default"), 'description': _(u"Default bootstrap theme"), 'css': self.default_theme},
            {'name': _(u"Bootstrap2"), 'description': _(u"Bootstrap 2.x theme"), 'css': self.bootstrap2_theme},
            ]
        select_css = context.get('site_theme', self.default_theme)

        if self.user_themes:
            themes.extend(self.user_themes)

        if self.use_bootswatch:
            ex_themes = cache.get(THEME_CACHE_KEY)
            if ex_themes:
                themes.extend(json.loads(ex_themes))
            else:
                ex_themes = []
                try:
                    flag = False#   True       ,   Flase,  requests    
                    if flag:
                        h = httplib2.Http()
                        resp, content = h.request("http://bootswatch.com/api/3.json", 'GET', '',
                            headers={"Accept": "application/json", "User-Agent": self.request.META['HTTP_USER_AGENT']})
                        if six.PY3:
                            content = content.decode()
                        watch_themes = json.loads(content)['themes']
                    else:
                        content = requests.get("https://bootswatch.com/api/3.json")
                        if six.PY3:
                            content = content.text.decode()
                        watch_themes = json.loads(content.text)['themes']

                    ex_themes.extend([
                        {'name': t['name'], 'description': t['description'],
                            'css': t['cssMin'], 'thumbnail': t['thumbnail']}
                        for t in watch_themes])
                except Exception as e:
                    print(e)

                cache.set(THEME_CACHE_KEY, json.dumps(ex_themes), 24 * 3600)
                themes.extend(ex_themes)

        nodes.append(loader.render_to_string('xadmin/blocks/comm.top.theme.html', {'themes': themes, 'select_css': select_css}))

좋은 웹페이지 즐겨찾기