首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django,React,Redux:提供图像

Django,React,Redux:提供图像
EN

Stack Overflow用户
提问于 2017-11-10 17:32:58
回答 2查看 1.3K关注 0票数 5

我正在为一个小项目使用React/Redux前端和Django后端。我只使用标准Django服务器进行开发。我正在尝试向已经存在的UserProfile模型中添加一个图像字段。目前,除了Django不能正确地将我的图像提供给主响应站点或管理站点之外,我已经完成了所有的工作。当我尝试导航到有关的url或使用Python请求库直接请求媒体时,响应类型为“text/html”。目前,我的模型有以下字段:

models.py

代码语言:javascript
运行
复制
class UserProfile(models.Model):
    ...
    ...
    profile_image = models.ImageField(upload_to='path_to_media')

项目urls.py

代码语言:javascript
运行
复制
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^api/account/', include('account.urls')),
    url(r'^api/post/', include('post.urls')),
    url(r'.*', views.root, name='root')
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

settings.py

代码语言:javascript
运行
复制
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static_cdn')
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'nattr'),
)

帐户urls.py

代码语言:javascript
运行
复制
urlpatterns = (
    ...,
    url(r'^edit_profile/(?P<user_id>[^/]+)/$',
       views.edit_profile,
      name='edit_profile'),
)

帐户views.py

代码语言:javascript
运行
复制
def edit_profile(request, user_id):
    try:
        user = User.objects.get(pk=user_id)
         form = UserProfileForm(request.POST, request.FILES, instance=user.profile, user=request.user)
        valid = form.is_valid()
        if valid:
            profile = form.save()
            return JsonResponse(profile.to_user())
        else:
            return JsonResponse({'errors': form.errors}, status=400)
    except User.DoesNotExist:
        return JsonResponse({'errors': 'cannot find user with that id'}, status=400)

我做错了什么?我已经为我的media_url & media_root;分配了媒体urls到我的urlpatterns中。我的视图和表单非常标准,我可以看到图像正在上传到文件夹结构中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-10 17:47:40

Django URL模式按顺序处理。您有.*之前的settings.MEDIA_URL,所以每个URL,无论发生什么,都会被它捕获。您应该将静态URL移到.*上方。

代码语言:javascript
运行
复制
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^api/account/', include('account.urls')),
    url(r'^api/post/', include('post.urls')),
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

# make sure this is always last
urlpatterns += [url(r'.*', views.root, name='root')]
票数 9
EN

Stack Overflow用户

发布于 2017-11-10 17:46:36

urlpatterns中添加以下内容

代码语言:javascript
运行
复制
urlpatterns += static(settings.MEDIA_URL,
                          document_root=settings.MEDIA_ROOT)

并将其添加到您的settings.py

代码语言:javascript
运行
复制
ENV_PATH = os.path.abspath(os.path.dirname(__file__))
MEDIA_ROOT = os.path.join(ENV_PATH, 'media/')

MEDIA_URL = '/media/'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47228252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档