Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django 1.8:帮助使文件名相对_Python_Django_Filenames_Relative Path_Django Settings - Fatal编程技术网

Python Django 1.8:帮助使文件名相对

Python Django 1.8:帮助使文件名相对,python,django,filenames,relative-path,django-settings,Python,Django,Filenames,Relative Path,Django Settings,我是Django的新手。首先,我将解释我的问题和逻辑。我想使我的文件路径相对于现在的绝对路径,这样我就可以在笔记本电脑和PC上工作,让一切都按原样显示。 我知道我必须更改下面settings.py中的媒体URL。做 MEDIA_URL = os.path.join(BASE_DIR, 'articles/static/articles/media/') STATIC_URL = os.path.join(BASE_DIR, 'articles/static/') 有道理吗?我的意思是,从逻辑上

我是Django的新手。首先,我将解释我的问题和逻辑。我想使我的文件路径相对于现在的绝对路径,这样我就可以在笔记本电脑和PC上工作,让一切都按原样显示。
我知道我必须更改下面settings.py中的媒体URL。做

MEDIA_URL = os.path.join(BASE_DIR, 'articles/static/articles/media/')
STATIC_URL = os.path.join(BASE_DIR, 'articles/static/')
有道理吗?我的意思是,从逻辑上讲,从BASE_DIR打印到C:\Users\kevIN3D\Documents\GitHub\articleTestProject\articleTestSite的说法会进入articles/static/articles/media/或者

BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir))
abspath(…)改变了一切吗


设置.py


url.py


我的问题是,当我尝试在声明中使用“/”时,它会将文件名打印为“C:\Users\kevIN3D\Documents\GitHub\articleTestProject\articleTestSite\articles/static/”,因此它对我自己使用了不正确的斜杠

如何使我的页面具有相对文件名?我希望能够在我的笔记本电脑和我的电脑之间处理这个问题,但就目前的情况而言,我只能在我的电脑上处理它,因为所有的文件名都是绝对的,只会在我的笔记本电脑上给我断开的链接


这里是指向存储库的链接。请帮忙,我完全被难住了。如果有人能用图像和自定义CSS来实现这一点,然后带我看看你做了什么。这是我第一次尝试将Django文件分发给本地主机以外的主机。

让我解释一下设置:

from django.conf import settings
用右波分隔路径 将每个文件夹传递给
os.path.join()
方法。例如:

os.path.join(BASE_DIR, 'articles', 'static')
静态URL、媒体URL 这些变量将传递给模板上下文处理器(如果使用
django.template.context\u processors.media
),而不做任何更改。此变量用于创建指向静态和媒体内容的客户端链接

您应该手动设置
静态URL
媒体URL
。就像这样:

STATIC_URL = "/static/"
MEDIA_URL = "/media/"
然后您可以在模板中使用它们:

<img src="{{STATIC_URL}}img/logo.png">(...)
请注意。如果您的应用文件夹中有
static
文件夹,并且您的应用列在
INSTALLED\u APPS
中,则此文件夹将自动添加到您的
STATICFILES\u DIRS

在开发过程中提供静态和媒体文件 非常简单,只需在urlpatterns之后添加以下行:

urlpatterns = patterns('',
    ... your patterns...
) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
不要忘记包括设置:

from django.conf import settings
在生产服务器上服务
  • 运行
    collectstatic
    命令将所有静态内容放在一个地方

  • 使用apache/nginx/etc服务器为静态和媒体文件夹设置服务器:

    别名/media//path/to/your/media 别名/static//path/to/your/static/


  • 所以我想我明白了, 可以说,我把事情看得很高。事实上,答案很简单。在给自己一个

    print(BASE_DIR)
    
    让它吐出来C:\Users\kevIN3D\Documents\GitHub\articlestproject\articlestsite我意识到我需要做的就是将它附加到不同的根变量中

    MEDIA_ROOT = 'C:/Users/kevIN3D/Documents/GitHub/articleTestProject/articleTestSite/articles/static/articles/'
    
    这是我的旧媒体,这显然是绝对的。但从这里我可以看到它与BASE_DIR共享相同的文件路径,所以我从那里开始

    MEDIA_ROOT = 'C:/Users/kevIN3D/Documents/GitHub/articleTestProject/articleTestSite/articles/static/articles/'
    
    变成

    MEDIA_ROOT = os.path.join(BASE_DIR, 'articles/static/articles/').replace('\\', '/') #run replace to convert UNIX slashes on Windows slashes
    


    我必须对STATIC_ROOT做同样的事情

    变成

    STATIC_ROOT = os.path.join(BASE_DIR, 'articles')
    

    @Kevin Leegsma,你得到了什么,你期望得到什么?这没用,或者我根本不理解
    STATIC\u ROOT=os.path.join(BASE\u DIR,'articles','STATIC')。replace('\\','/')STATIC\u URL='/STATIC/articles/'print(STATIC\u ROOT)
    Prints:./articlestproject/articlestsite/articles,路径的其余部分包含在STATIC\u URL中,导致'/STATIC/articles/'
    MEDIA\u ROOT=os.path.join(BASE\u DIR,'articles','STATIC,'articles','articles')).replace(“\\”、“/”)MEDIA\u URL=“/MEDIA/”print(MEDIA\u ROOT)
    Prints:./articleTestProject/articleTestSite/articles/static/articles,MEDIA_URL中包含的路径的其余部分指向“/MEDIA/”子文件夹,但现在尝试加载我在/articles/2/“tuple”对象上获得的任何站点AttributeError没有属性“resolve”,我是Django的新手,无法理解古老的答案。在大多数情况下,我都能自己解决所有问题/错误。但是这种错误让我想起了我在C++中使用的链接错误,这些都让我困惑。我想出来了,下面的解决方案。我只是装傻。我在想这件事可能会变得复杂。所以我回到了我最初的绝对有效的方法,仔细研究了一下,寻找最简单的解决方案。打印出来的
    print(BASE\u DIR)
    就从这里开始了。
    MEDIA_ROOT = os.path.join(BASE_DIR, 'articles/static/articles/').replace('\\', '/') #run replace to convert UNIX slashes on Windows slashes
    
    STATIC_ROOT = 'C:/Users/kevIN3D/Documents/GitHub/articleTestProject/articleTestSite/articles/'
    
    STATIC_ROOT = os.path.join(BASE_DIR, 'articles')