Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@boonrew

DjangoのMarkdownx をサイトルート以外で使う

More than 1 year has passed since last update.

DjangoではMarkdownx というパッケージを使って、プレビューを出しながらマークダウン記法で書かれたソースのデバッグができる。
これはかなり便利なのだけど、Markdownx は、Djangoプロジェクトがサイトルート以外にデプロイされていると対応してくれない。

たとえば、

apache2.conf
WSGIScriptAlias /prefix /django/project/project/wsgi.py

のようになっている場合、Markdownx のURLとしては
/prefix/markdownx/markdownify のようになってくれないと困るが、Markdownxのコードでは、markdownx/settings.pyの中で固定値で書かれたものを使っているため、/markdownx/markdownifyにアクセスしようとして404になる。

これを回避するには、以下のようにすればよい。

  1. プロジェクトのurls.py でmarkdownxのincludeにnamespaceを指定しておく(markdownxとする)
  2. markdownx/widgets.py 内の`attrs.updateのうち、URL部分をreverse()で書き換える

検索で引っかかってくるMarkdownxの解説では、urlpatternsにnamespaceを指定してしないものもあるので、以下のようにnamespaceを指定しておく。

settings.py
urlpatterns = [
    path('markdownx/', include(('markdownx.urls','markdownx'))), 
      :

続いて、markdownx/widgets.py(各環境の site-packages内にある)だが、元は以下のようになっている。(どこにあるんだよ、って時は、定番のfindで、
sudo find / -name 'widgets.py' | grep markdownx
で探しましょう。settings.pyもそこ。)

widgets.py(オリジナル)
attrs.update({
    'data-markdownx-editor-resizable': MARKDOWNX_EDITOR_RESIZABLE,
    'data-markdownx-urls-path': MARKDOWNX_URLS_PATH,                  
    'data-markdownx-upload-urls-path': MARKDOWNX_UPLOAD_URLS_PATH,             
    'data-markdownx-latency': MARKDOWNX_SERVER_CALL_LATENCY
})

大文字の変数は、markdownx/settings.py の中で定数として定義されていて、widgets.pyの頭のところでimportされている。これらのうち、_URLS_PATHで終わる2つを以下のように書き換える。

widgets.py(改変後)
from django.urls import reverse
       :
attrs.update({
    'data-markdownx-editor-resizable': MARKDOWNX_EDITOR_RESIZABLE,
    'data-markdownx-urls-path': reverse('markdownx:markdownx_markdownify'),
    'data-markdownx-upload-urls-path': reverse('markdownx:markdownx_upload'),
    'data-markdownx-latency': MARKDOWNX_SERVER_CALL_LATENCY
})

これで、サイトルート以外にDjangoをデプロイしている場合にもMarkdownxを使うことができた。

まぁ、サイトルート以外で使う例はそれほどないのかもしれないけど、今回は既にあるPHPサイト(こいつがサイトルート)に追加でデプロイという関係からちょっとハマってしまった。

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
boonrew
ちょっとしたメモラー

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?