python - 用于加载 Angular 模板的 Django Angular 文件夹结构

标签 python angularjs django angular directory

我已经掌握了构建 REST API 来传递所有数据的窍门,但我无法了解如何设置文件夹结构以便能够通过访问 URL 来加载 Angular 模板。

可以说,在我的settings.py中,我有一个注册的路径api,其中包含我想要传递给客户端的JSON数据,并且有一些angtemplate.html。我还有一个名为 apitest 的 Django 应用程序,它从服务器获取数据并将数据提供给 Angular 需要从中获取数据的 api。

如何路由请求,以便当用户访问我的服务器上的 URL(例如 127.0.0.1:8000/apifetch)时,用户会看到已从/apifetch 加载数据的 angtemplate.html?

我意识到这是一个三重问题,涉及第一个 Angular 应用程序结构、第二个 Django 模板语法和文件夹结构、第三个 url 模式。

我尝试遵循thinkster angular django tutorial ,但无法将 Angular 应用程序连接到网站。

我自己的理论是,在 apitest Django 应用程序中,我创建了一些模板,并在该应用程序的静态文件夹中保留我的 Angular 应用程序,将其作为静态加载到模板中,并像通常那样连接 url 。

但是我听说你不应该混合使用 Django 和 Angular 模板,否则就会这样做。

非常感谢广泛的答案,最重要的是,只是一个示例文件夹结构以及使其工作的网址将非常有值(value),这样我就可以从一个有点工作的基础开始自己进行实验。一段时间以来我一直在用头撞墙。

最佳答案

TLDR:对后端 API 使用单独的路径,例如 /api/*,对于 Angular 应用程序,将所有其他路由重定向到 index.html .

<小时/>

我一直在使用 Django v1.10 + AngularJS(之后迁移到 Angular)。 我将 Angular/AngularJS 用于所有前端工作,并且仅使用后端主要通过 API 获取数据。

我一直在使用这个文件夹结构:

  • dist(这是我放置生成的 Angular 包的位置)
    • index.html
  • django_app
    • 设置.py
    • url.py
    • wsgi.py
    • ...
  • 应用程序
    • 静态(django静态文件)
    • apps.py
    • 模型.py
    • url.py
    • views.py
    • ...
  • src(Angular 源代码,如果您想保持根文件夹中的内容干净,您可以将所有 Angular 相关文件移动到单独的文件夹中,即 angular/src)
  • Angular .json
  • tsconfig.json
  • ...

在开发过程中,我会将 Angular 应用程序的所有路由重定向到 index.html

django_app\urls.py中:

urlpatterns = [
    url(r'^api/', include('app.urls')),
    url(r'^admin/password_reset/$', auth_views.password_reset, name='admin_password_reset'),
    url(r'^admin/password_reset/done/$', auth_views.password_reset_done, name='password_reset_done'),
    url(r'^admin/reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>.+)/$', auth_views.password_reset_confirm, name='password_reset_confirm'),
    url(r'^admin/reset/done/$', auth_views.password_reset_complete, name='password_reset_complete'),
    url(r'^admin/', admin.site.urls, name='admin'),
]

# Serve media files locally for development
if settings.DEBUG:
    import debug_toolbar

    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns += [
        url(r'^__debug__/', include(debug_toolbar.urls)),
        url(r'^.*$', staticfilesviews.serve, {'path': 'index.html'}, name='index'),
    ]

这些是我的设置:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'dist'),
)
<小时/>

在生产中,您应该使用像 nginx 这样的反向代理来仅路由 Django 以满足特定用途,例如调用 API。其他所有内容都应传递到 Angular 应用程序条目 index.html

关于python - 用于加载 Angular 模板的 Django Angular 文件夹结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50424496/

相关文章:

python - django 模板中的表单字段值

python - 查找嵌套列表中具有最大第二个元素的元素

angularjs - 单页应用程序的 vhosts conf

java - 将 python 正则表达式转换为 java

AngularJs,无论用户是否连接都更改菜单项

用于处理已完成 promise 的 Javascript 模式

python - 如何使用 Django 检查数据是否为 ​​TSV/CSV 格式(不是扩展名)

python - 具有动态名称的 Django 模型字段

python - 如何从树状文件目录文本文件创建嵌套字典对象?

php - 编写此 PHP 代码的更有效方法,以及如何实例化类似于 Python 列表的 PHP 数组