当前正在尝试进行社交应用。我创建了两个应用程序Main和Post。我的帖子应用程序将处理创建,删除帖子,帖子列表的所有功能。我的主应用程序是我的主页,该主页将显示所有帖子,例如,类似于Facebook的主页。
主应用当前对用户进行身份验证,而对不进行身份验证。我为我的帖子应用创建了视图和模板,现在我想将其包含在Main的应用首页中。不确定如何执行此操作。不要求任何人编写代码,但至少给出了如何实现此目标的结构。
应用程序的基本结构:
--Main_app
--_views.py
--templates
--home.html
--posts_app
--_views.py
--templates
--posts.html
posts_app视图当前包含的文件之一是:
def posts_list(request):
#return HttpResponse("<h1> List a posts. </h1>")
render(requests, "posts.html", {})
templates / posts.html包含以下文件:
<!DOCTYPE html>
<html lang="en">
<body>
<h1>Posts template is working</h1>
</body>
</html>
在我的main_app模板/ html中:
{% if user.is_authenticated %}
<h1>Homepage</h1>
<!-- Posts template -->
{% include "posts/templates/posts.html" %}
{% endif %}
当时对我来说,仅将模板从posts应用程序导入到主应用程序就可以了。显然没有用,所以我做了一些研究,找不到一个确定的解决方案,是否有所谓的模板继承的东西,应该将我的观点从帖子中导入到main中。我不确定。任何帮助表示赞赏。
答案 0 :(得分:0)
如果要使用同一模板,最好的方法是将模板添加到项目目录中而不是应用程序中。
-myproject\
-Main_app\
-posts_app\
-templates\
-template_name.html
然后在设置中添加
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],# Add this line
'APP_DIRS': True,
........
在您看来,您可以像template_name.html
那样直接引用
其他方法是在类似的目录中创建模板
myproject\
-Main_app\
-templates\
-Main_app\
mytemplate.html
-posts_app\
现在您可以通过引用Main_app\mytemplate.html
在这种情况下,第一个非常有效。
答案 1 :(得分:0)
您可以做的是将模板文件夹放在项目目录的根目录下。所以不用
--Main_app
--_views.py
--templates
--home.html
--posts_app
--_views.py
--templates
--posts.html
你可以
--Main_app
--_views.py
--posts_app
--_views.py
--templates
--SHARED.html
--main
--home.html
--posts
--posts.html
在您看来,您可以执行以下操作:
return render(request, 'SHARED.html', context) # For shared
return render(request, 'posts/posts.html', context) # For template in posts
答案 2 :(得分:0)
最好在根项目文件夹中创建一个单独的templates
目录。这样,您可以在任何所需的应用程序中访问html文件。您的目录结构如下所示:
.
├── blog
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ ├── 0001_initial.cpython-35.pyc
│ │ └── __init__.cpython-35.pyc
│ ├── models.py
│ ├── __pycache__
│ │ ├── admin.cpython-35.pyc
│ │ ├── apps.cpython-35.pyc
│ │ ├── __init__.cpython-35.pyc
│ │ ├── models.cpython-35.pyc
│ │ ├── urls.cpython-35.pyc
│ │ └── views.cpython-35.pyc
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── blog_project
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-35.pyc
│ │ ├── settings.cpython-35.pyc
│ │ ├── urls.cpython-35.pyc
│ │ └── wsgi.cpython-35.pyc
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── db.sqlite3
├── manage.py
├── Pipfile
├── Pipfile.lock
├── static
│ └── css
│ └── base.css
└── templates
├── base.html
├── home.html
├── post_detail.html
└── post_new.html
This is a simple blog I made using Django
如果您想要参考,可能会有所帮助。
答案 3 :(得分:0)
对于通过不同应用程序交叉加载模板,我建议对项目进行结构设计,以使templates
是一个单独的目录,这将以两种方式使您受益:
示例模板主管:
── templates
│ ├── main
│ ├── another_cool_app
│ ├── accounts
│ ├── posts
│ │ ├── timeline.html
│ │ ├── post_details.html
以此类推。
要在其他模板中加载模板,您只需:
{% include "posts/timeline.html" with posts_list=user.friends_posts %}
快乐的编码。