Структура угловой папки Django для загрузки угловых шаблонов - PullRequest
0 голосов
/ 19 мая 2018

У меня есть навык создания API-интерфейсов отдыха для передачи всех данных, но мне трудно знать, как настроить структуру папок, чтобы можно было загружать угловой шаблон, посещая URL-адрес.

Допустим, в моем settings.py у меня есть зарегистрированный путь api, который содержит данные JSON, которые я хочу передать клиенту, и файл angtemplate.html.У меня также есть приложение Django под названием apitest, которое получает данные с сервера и предоставляет данные в API, которые нужны angular для получения данных.

Как мне перенаправить запрос, чтобы, когда пользователь перешел на URLНа моем сервере, например, 127.0.0.1:8000/apifetch, пользователь представляет файл angtemplate.html, который загрузил данные из / apifetch?

Я понимаю, что это тройной вопрос, касающийся первой угловой структуры приложения, второгоСинтаксис шаблона Django, структура папок и, в-третьих, шаблоны url.

Я пытался следовать учебному пособию thinkster по угловому django , но не смог подключить угловое приложение к веб-сайту.

Моя собственная теория заключается в том, что внутри самого аппетитного приложения Django я создаю несколько шаблонов, а в статической папке этого приложения я сохраняю свои угловые приложения, которые загружаю в шаблон как статические, и подключаю URL-адрес, как обычно,

Однако я слышал, что вы не должны смешивать Django и угловые шаблоны, что бы это делало.

Широкие ответы приветствуются, прежде всего просто пример структуры папок сURL-адреса, которые заставляют его работать, были бы невероятно ценными, так что я могу начать экспериментировать с собой с некоторой рабочей базы.Я уже некоторое время бьюсь головой об стену.

1 Ответ

0 голосов
/ 19 мая 2018

TLDR : используйте отдельный путь, например /api/* для бэкэнд-API, перенаправьте каждый второй маршрут на index.html для приложения Angular.


Я работал сDjango v1.10 + AngularJS (после чего мигрировал в Angular).Я использую Angular / AngularJS для всех интерфейсных работ и использую только серверный в основном для получения данных через API.

Я использовал эту структуру папок:

  • dist(это где я положил сгенерированный угловой пакет)
    • index.html
  • django_app
    • settings.py
    • urls.py
    • wsgi.py
    • ...
  • app
    • static (статические файлы django)
    • apps.py
    • models.py
    • urls.py
    • views.py
    • ...
  • src (Исходный код Angular, вы можете переместить все связанные с Angular файлы в отдельную папку, если вы хотите сохранить чистоту в корневой папке, например, angular/src)
  • angular.json
  • tsconfig.json
  • ...

Во время разработки я перенаправил бы все маршруты на index.html для приложения Angular.

В 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...