Windows环境下的Django MEDIA_ROOT开发

时间:2017-08-06 19:41:04

标签: django django-models django-imagekit

在我的settings.py中添加了以下内容

print(BASE_DIR)
print(MEDIA_URL)
print(MEDIA_ROOT)

打印以下内容

d:/OneDrive/!code_projects/!django_projects/mgTut
/media/
d:/OneDrive/!code_projects/!django_projects/mgTut/media/

但是当我启动服务器时,我看到了这个错误

FileNotFoundError: [Errno 2] No such file or directory: 'd:\\OneDrive\\!code_projects\\!django_projects\\mgTut\\media\\media\\images\\profile_image\\0C0A8604_1_mKlAyCG.JPG'

我不太确定从哪里开始。我的media_root应该被替换,但它似乎不是什么时候被调用。

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR + '/media/').replace('\\', '/')

我的models.py类:

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    description = models.CharField(max_length=200, default='')
    city = models.CharField(max_length=50, default='')
    state = models.CharField(max_length=2, default='')
    website = models.URLField(default='')
    phone = models.IntegerField(default=0)
    avatar = models.ImageField(upload_to=b'media/images/profile_image',
                               default='media/images/profile_image/Profile_Blank.PNG')
    avatar_thumbnail = ImageSpecField(source='avatar',
                                      processors=[ResizeToFill(100, 100)],
                                      format='JPEG',
                                      options={'quality': 60})

    def __str__(self):
        return '%s - %s' % (self.user, self.description)


profile = UserProfile.objects.all()[0]
print(profile.avatar_thumbnail.url)    # > /media/CACHE/images/982d5af84cddddfd0fbf70892b4431e4.jpg
print(profile.avatar_thumbnail.width)  # > 100

完整错误:

d:/OneDrive/!code_projects/!django_projects/mgTut
/media/
d:/OneDrive/!code_projects/!django_projects/mgTut/media/
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x000002EDDFA09048>
Traceback (most recent call last):
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\django\utils\autoreload.py", line 227, in wrapper
    fn(*args, **kwargs)
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\django\core\management\commands\runserver.py", line 117, in inner_run
    autoreload.raise_last_exception()
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\django\utils\autoreload.py", line 250, in raise_last_exception
    six.reraise(*_exception)
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\django\utils\six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\django\utils\autoreload.py", line 227, in wrapper
    fn(*args, **kwargs)
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\django\__init__.py", line 27, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\django\apps\registry.py", line 108, in populate
    app_config.import_models()
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\django\apps\config.py", line 202, in import_models
    self.models_module = import_module(models_module_name)
  File "C:\Program Files\Python36\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 978, in _gcd_import
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load
  File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
  File "d:\OneDrive\!code_projects\!django_projects\mgTut\account\models.py", line 27, in <module>
    print(profile.avatar_thumbnail.url)    # > /media/CACHE/images/982d5af84cddddfd0fbf70892b4431e4.jpg
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\imagekit\cachefiles\__init__.py", line 84, in url
    return self._storage_attr('url')
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\imagekit\cachefiles\__init__.py", line 74, in _storage_attr
    existence_required.send(sender=self, file=self)
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\django\dispatch\dispatcher.py", line 193, in send
    for receiver in self._live_receivers(sender)
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\django\dispatch\dispatcher.py", line 193, in <listcomp>
    for receiver in self._live_receivers(sender)
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\imagekit\registry.py", line 53, in existence_required_receiver
    self._receive(file, 'on_existence_required')
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\imagekit\registry.py", line 61, in _receive
    call_strategy_method(file, callback)
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\imagekit\utils.py", line 166, in call_strategy_method
    fn(file)
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\imagekit\cachefiles\strategies.py", line 15, in on_existence_required
    file.generate()
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\imagekit\cachefiles\__init__.py", line 93, in generate
    self.cachefile_backend.generate(self, force)
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\imagekit\cachefiles\backends.py", line 109, in generate
    self.generate_now(file, force=force)
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\imagekit\cachefiles\backends.py", line 96, in generate_now
    file._generate()
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\imagekit\cachefiles\__init__.py", line 97, in _generate
    content = generate(self.generator)
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\imagekit\utils.py", line 152, in generate
    content = generator.generate()
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\imagekit\specs\__init__.py", line 150, in generate
    img = open_image(self.source)
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\pilkit\utils.py", line 21, in open_image
    target.seek(0)
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\django\core\files\utils.py", line 20, in <lambda>
    seek = property(lambda self: self.file.seek)
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\django\db\models\fields\files.py", line 51, in _get_file
    self._file = self.storage.open(self.name, 'rb')
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\django\core\files\storage.py", line 38, in open
    return self._open(name, mode)
  File "D:\OneDrive\!code_projects\!django_projects\windows_venv\lib\site-packages\django\core\files\storage.py", line 300, in _open
    return File(open(self.path(name), mode))
FileNotFoundError: [Errno 2] No such file or directory: 'd:\\OneDrive\\!code_projects\\!django_projects\\mgTut\\media\\media\\images\\profile_image\\0C0A8604_1_mKlAyCG.JPG'

更新:它与ImageKit提供的URL隔离。打印profile.avatar_thumbnail.url就是错误。

尝试添加替换它,同样的问题。

print(profile.avatar_thumbnail.url.replace('\\', '/'))    # > /media/CACHE/images/982d5af84cddddfd0fbf70892b4431e4.jpg
print(profile.avatar_thumbnail.width.replace('\\', '/'))  # > 100

URL配置:

from django.conf.urls import url, include
from django.contrib import admin
from django.urls import reverse_lazy
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.auth.views import (
    LoginView,
    LogoutView,
    PasswordResetView,
    PasswordResetDoneView,
    PasswordChangeView,
    PasswordChangeDoneView,
    PasswordResetView,
    PasswordResetConfirmView,
    PasswordResetCompleteView
)
from . import views

urlpatterns = [
    url(r'^login/$',
        LoginView.as_view(template_name='account/login.html'),
        name='login'),
    url(r'^logout/$',
        LogoutView.as_view(next_page=reverse_lazy('login')),
        name='logout'),
    url(r'^register/$',
        views.register,
        name='register'),
    url(r'^password_change/$',
        PasswordChangeView.as_view(
            template_name='account/password_change_form.html'
        ),
        name='password_change'),
    url(r'^password_change/done/$',
        PasswordChangeDoneView.as_view(
            template_name='account/password_change_done.html'
            ),
        name='password_change_done'),
    url(r'^password_reset/$',
        PasswordResetView.as_view(
            template_name='account/password_reset_form.html'
        ),
        name='password_reset'),
    url(r'^password_reset/done/$',
        PasswordResetDoneView.as_view(
            template_name='account/password_reset_done.html'
        ),
        name='password_reset_done'),
    url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
        PasswordResetConfirmView.as_view(
            template_name='account/password_reset_confirm.html'
        ),
        name='password_reset_confirm'),
    url(r'^reset/done/$',
        PasswordResetCompleteView.as_view(
            template_name='account/password_reset_complete.html'
            ),
        name='password_reset_complete'),
    url(r'^admin/',
        admin.site.urls),
    url(r'^$',
        views.home,
        name='homepage'),
    url(r'^account/',
        include('account.urls')),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

0 个答案:

没有答案