我正在制作一个Django项目,一个商业目录。 这里我使用ABSOULATE PATHS进行模板渲染, 我觉得这可能会在将来产生问题。 请查看我的代码并建议我如何解决这个问题,以便将来不会产生任何问题。
请帮忙
我的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和SEARCH。 请建议使用绝对路径的替代方法,以便在我从GITHUB克隆它并尝试运行它时不会产生错误。
请帮助解决这个问题。
答案 0 :(得分:2)
您是否考虑过阅读the Django tutorial?。 不要忘记在settings.py文件中设置TEMPLATE_DIRS,这样做的好建议可以在另一个答案中找到; Django template Path
答案 1 :(得分:2)
您应该在TEMPLATE_DIRS
列表中的setting.py文件中列出您的模板目录。
无论您是否这样做,都应该使用os.path
模块的功能动态生成绝对路径。
os.path.abspath(__file__)
将返回其所调用文件的绝对路径。
os.path.dirname('some/path')
将返回'some/Path'
通过组合它们,您可以得到绝对的路径,这些路径在不同系统上保持准确,例如
os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
将返回到包含当前文件的目录上一级目录的绝对路径。
请阅读os.path
模块的docs。您可能也需要使用os.path.join
。
答案 2 :(得分:2)
在您的项目settings.py文件中:
在顶部添加
import os.path
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
然后设置模板路径:
TEMPLATE_DIRS = (
os.path.join(PROJECT_ROOT, "templates"),
)
答案 3 :(得分: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/
是模板的目录。