【问题标题】:Integrate SASS/SCSS with Django将 SASS/SCSS 与 Django 集成
【发布时间】:2014-02-26 13:19:52
【问题描述】:

我想在 Django 应用程序中使用 SASS/SCSS。

我点击了链接https://bitbucket.org/synic/django-sass。 我使用 sudo pip install sass 安装了 SASS。

当我运行 Python manage.py runserver 时,我得到了错误

'sass' 不是有效的标签库:找不到模板库 sass,已尝试 django.templatetags.sass

谁能帮帮我?!

【问题讨论】:

  • 您是否在该链接中执行了第 1 步?
  • 是的,我在安装的应用程序中添加了“sass”,我使用 sudo pip install sas 安装。当我做syncdb时,它很好,但是当我运行runserver时,我得到了这个错误。

标签: django sass


【解决方案1】:

python sass (pip install sass) https://pypi.python.org/pypi/sass 不同 来自 django-sass (https://bitbucket.org/synic/django-sass)

按照文档说明安装和设置后,从https://bitbucket.org/synic/django-sass 下载 django sass。

【讨论】:

  • 如你所说,我下载了包并安装了。但我仍然面临这个问题。
【解决方案2】:

您是否首先安装了 sass,Ruby 应用程序?

$ apt-get install ruby-sass

你会知道它是否正确完成;在命令行中输入sass,做些时髦的事情。

接下来,我克隆了 django-sass(来自另一个答案):

git clone git@bitbucket.org:synic/django-sass.git

然后导航到puled文件夹并安装它。

$ python setup.py install

最初安装崩溃了:

IOError: [Errno 2] No such file or directory: 'CHANGES.rst'

于是我迅速创建了文件:

 touch CHANGES.rst

然后再次运行安装命令。

没问题。

【讨论】:

    【解决方案3】:

    django-sass-processor 包是一个很棒的包,它可以让您轻松地将 SASS/SCSS 与 Django 集成。

    这里有一个关于如何设置SASS/SCSS with Django的教程。

    我已经用过几次了,对它很满意。

    【讨论】:

      【解决方案4】:

      这是我的DIY开箱即用解决方案

      1. 安装LibsassWatchdog

        pip install libsass watchdog
        
      2. 创建一个名为core的应用

        python manage.py startapp core
        

      核心/sass.py

      import os
      import time
      import site
      import sass
      import threading
      from pathlib import Path
      from django.apps import apps
      from django.conf import settings
      from watchdog.observers import Observer
      from watchdog.events import FileClosedEvent
      
      
      def compiler():
          packageFolders = [
              site.getusersitepackages(),
              *[path for path in site.getsitepackages()],
          ]
      
          staticFolders = settings.STATICFILES_DIRS.copy()
          staticFolders += [
              os.path.join(app.path, "static") for app in apps.get_app_configs()
          ]
      
          compileFolders = staticFolders.copy()
          for staticFolder in staticFolders:
              for packageFolder in packageFolders:
                  if Path(staticFolder).is_relative_to(packageFolder):
                      if staticFolder in compileFolders:
                          compileFolders.remove(staticFolder)
      
          if settings.DEBUG:
      
              def watcher(path):
                  class Event(FileClosedEvent):
                      def dispatch(self, event):
                          filename, extension = os.path.splitext(event.src_path)
                          if extension == ".scss":
                              time.sleep(0.5)
                              for d in compileFolders:
                                  if os.path.isdir(d):
                                      try:
                                          sass.compile(
                                              dirname=(d, d),
                                              output_style="expanded",
                                              include_paths=staticFolders,
                                          )
                                      except sass.CompileError as error:
                                          print(error)
      
                  event_handler = Event(path)
                  observer = Observer()
                  observer.schedule(event_handler, path, recursive=True)
                  observer.start()
                  try:
                      while True:
                          time.sleep(1)
                  except KeyboardInterrupt:
                      observer.stop()
                  observer.join()
      
              for d in compileFolders:
                  if os.path.isdir(d):
                      try:
                          sass.compile(
                              dirname=(d, d),
                              output_style="expanded",
                              include_paths=staticFolders,
                          )
                      except sass.CompileError as error:
                          print(error)
                      thread = threading.Thread(target=watcher, args=(d,), daemon=True)
                      thread.start()
          else:
              d = settings.STATIC_ROOT
              if os.path.exists(d):
                  try:
                      sass.compile(
                          dirname=(d, d),
                          output_style="expanded",
                          include_paths=staticFolders,
                      )
                  except sass.CompileError as error:
                      print(error)
      

      核心/apps.py

      from django.apps import AppConfig
      from core.sass import compiler
      
      
      class CoreConfig(AppConfig):
          default_auto_field = 'django.db.models.BigAutoField'
          name = 'core'
      
          def ready(self):
              compiler()
      

      有关更多信息,djboilerplate 是一个样板项目,我已将其添加到 sass 功能中

      【讨论】:

        猜你喜欢
        • 2018-12-20
        • 2020-02-15
        • 1970-01-01
        • 2019-12-04
        • 2018-03-26
        • 2016-03-09
        • 2021-09-15
        • 1970-01-01
        • 2013-05-21
        相关资源
        最近更新 更多