2013-07-15 41 views
-2

我正在制作一个Django项目,一个商业目录。 我在这里使用了用于模板渲染的ABSOULATE PATHS, 我认为这可能会在未来造成问题。 请查看我的密码,并建议我如何解决这个问题,以便将来不会产生任何问题。Django中绝对路径的替代

请帮

我的models.py是::

from django.db import models 


class Directory(models.Model): 

    Bussiness_name = models.CharField(max_length=300) 
    Description = models.CharField(max_length=900) 
    Number = models.CharField(max_length=100) 
    Web_url = models.CharField(max_length=800) 
    Catogory = models.CharField(max_length=200) 


    def __unicode__(self): 
     return self.Bussiness_name 

class Adress(models.Model): 
    directory = models.ForeignKey(Directory) 
    adress_name = models.CharField(max_length=300) 
    def __unicode__(self): 
     return self.adress_name 

class Photos(models.Model): 
    directory = models.ForeignKey(Directory) 
    Photo_path = models.CharField(max_length=100) 
    Photo_name = models.CharField(max_length=100) 
    def __unicode__(self): 
     return self.Photo_name 

我view.py是::

# Create your views here. 
from django.http import HttpResponse 
from crawlerapp.models import Directory 
from crawlerapp.models import Adress 
from crawlerapp.models import Photos 
from django.template import Context, loader 
from django.shortcuts import render 

def index(request): 
    Directory_list = Directory.objects.all() 
    t=loader.get_template('C:/Python27/django/crawler/templates/crawlertemplates/index.html') 
    c = Context({'Directory_list': Directory_list,}) 
    return HttpResponse(t.render(c)) 

def contactus(request): 
    Directory_list = Directory.objects.all() 
    t=loader.get_template('C:/Python27/django/crawler/templates/crawlertemplates/contactus.html') 
    c = Context({'Directory_list': Directory_list,}) 
    return HttpResponse(t.render(c)) 

def search(request): 
    if 'what' in request.GET and request.GET['what']: 
     what = request.GET['what'] 
     crawlerapp = Directory.objects.filter(Catogory__icontains=what) 
     return render(request, 'C:/Python27/django/crawler/templates/crawlertemplates/search.html', 
        {'crawlerapp': crawlerapp, 'query': what}) 

    elif 'who' in request.GET and request.GET['who']: 
     who = request.GET['who'] 
     crawlerapp = Directory.objects.filter(Bussiness_name__icontains=who) 
     return render(request, 'C:/Python27/django/crawler/templates/crawlertemplates/search.html', 
        {'crawlerapp': crawlerapp, 'query': who}) 

    else: 
     message = 'You submitted an empty form.' 
    return HttpResponse(message) 

我的urls.py是::

from django.conf.urls import patterns, include, url 
# Uncomment the next two lines to enable the admin: 
from django.contrib import admin 
admin.autodiscover() 

urlpatterns = patterns('', 
    # Examples: 
    # url(r'^$', 'crawler.views.home', name='home'), 
    # url(r'^crawler/', include('crawler.foo.urls')), 

    # Uncomment the admin/doc line below to enable admin documentation: 
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), 

    # Uncomment the next line to enable the admin: 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^crawlerapp/$', 'crawlerapp.views.index'), 
    url(r'^crawlerapp/contactus/$', 'crawlerapp.views.contactus'), 
    url(r'^crawlerapp/search/$', 'crawlerapp.views.search'), 
) 

我有3个HTML页面INDEX,CONTACTUS和搜索。 请建议绝对路径的替代方案,以便在我从GITHUB克隆它并尝试运行时创建任何错误。

请帮忙解决这个问题。

回答

0

有了这个,你要在义务在未来重新检查所有文件,如果你改变的目录,所以改变的情况下的路径:在你settings.py文件中定义:

import os.path 

TEMPLATE_DIRS = (
os.path.join(os.path.dirname(__file__),'templates').replace('\\','/'), 
'/path/to/my/project/' 
'/path/to/my/project/template/', # for the apps 
) 

哪里templates/是您的模板的目录。

2

你应该列出你的模板目录在你的setting.py文件中,在TEMPLATE_DIRS列表中。

无论你是否这样做,都应该使用os.path模块的函数动态生成绝对路径。

os.path.abspath(__file__) 

将返回绝对路径,这就是所谓的文件。

os.path.dirname('some/path') 

将路径返回到上一级目录'some/Path'

通过结合他们,你可以得到绝对的pathes这将保持准确不同的系统,例如

os.path.abspath(os.path.dirname(os.path.dirname(__file__))) 

无线将返回到包含当前文件的目录之上的目录的绝对路径。

os.path模块阅读docs。您可能还需要使用os.path.join

2

在您的项目设置中。PY文件:

顶部

import os.path 
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) 

加入这个然后设置模板路径做到这一点:

TEMPLATE_DIRS = (
    os.path.join(PROJECT_ROOT, "templates"), 
)