2012-09-05 29 views
13

Tôi có một dự án Django cho một trang web blog/diễn đàn đơn giản mà tôi đang xây dựng.Tôi đặt tên miền cho trang web khuôn khổ Trang web Django của tôi ở đâu, khi tôi chỉ có một trang?

Tôi đang sử dụng syndication feed framework, dường như tạo URL cho các mục trong nguồn cấp dữ liệu bằng cách sử dụng tên miền của trang web hiện tại từ the Sites framework.

Trước đây tôi chưa biết về khuôn khổ Trang web. Dự án của tôi sẽ không được sử dụng cho nhiều trang web, chỉ một.

Điều tôi muốn làm là đặt thuộc tính domain của trang web hiện tại. Trường hợp trong dự án Django của tôi tôi nên làm điều đó? Một nơi nào đó trong /settings.py?

+0

Ah: loại trùng lặp của http://stackoverflow.com/questions/3536123/where-do-i-set-my-site-url-in-django-settings –

Trả lời

20

Nếu tôi hiểu chính xác, Dữ liệu khuôn khổ trang web được lưu trữ trong cơ sở dữ liệu, vì vậy nếu tôi muốn lưu trữ vĩnh viễn dữ liệu này, tôi đoán nó phù hợp trong một số initial_data fixture.

Tôi bắn lên vỏ Django, và đã làm như sau:

>>> from django.contrib.sites.models import Site 
>>> one = Site.objects.all()[0] 
>>> one.domain = 'myveryspecialdomain.com' 
>>> one.name = 'My Special Site Name' 
>>> one.save() 

sau đó tôi nắm lấy chỉ dữ liệu này tại cửa sổ dòng lệnh:

python manage.py dumpdata sites 

Và dán nó vào tôi tồn tại trước đó initial_data vật cố định.

+2

Một sửa chữa - Site.domain chỉ nên là tên miền, không phải là một URL. Ví dụ. 'example.com', không phải' http: // example.com/' –

+0

@PaulBissex: ah, cảm ơn bạn - Tôi đã cập nhật ví dụ mã cho phù hợp. –

+0

Tôi cần khởi động lại apache để cập nhật hoạt động. '' '# /etc/init.d/apache2 restart''' – zakiakhmad

4

Bạn có thể sửa đổi mục nhập Trang web trong cơ sở dữ liệu của mình theo cách thủ công. Điều hướng đến bảng có tên 'django_site'. Sau đó, bạn sẽ chỉ thấy một mục (hàng). Bạn sẽ muốn sửa đổi trường (cột) có tên 'tên miền'.

1

Bạn có thể thay đổi nó bằng cách sử dụng trang web quản trị django.

Chỉ cần vào 127.0.0.1:8000/admin/sites/

+0

Tôi đang tìm cách làm điều đó trong mã. –

0

Những câu trả lời khác đề nghị để tự cập nhật các trang web trong admin, vỏ, hoặc DB của bạn. Đó là một ý tưởng tồi - nó phải là tự động.

Bạn có thể tạo di chuyển sẽ tự động thực hiện việc này khi bạn chạy di chuyển, vì vậy bạn có thể yên tâm rằng nó luôn được áp dụng (chẳng hạn như khi bạn triển khai sản xuất). This is also recommended in the documentation nhưng không liệt kê hướng dẫn.

Trước tiên, chạy ./manage.py makemigrations --empty myapp để tạo di chuyển trống. Sau đó, thêm đoạn mã sau:

from django.db import migrations 
from django.conf import settings 


def update_site_name(apps, schema_editor): 
    SiteModel = apps.get_model('sites', 'Site') 
    domain = 'mydomain.com' 

    SiteModel.objects.update_or_create(
     pk=settings.SITE_ID, 
     domain=domain, 
     name=domain 
    ) 


class Migration(migrations.Migration): 

    dependencies = [ 
     # Make sure the dependency that was here by default is also included here 
     ('sites', '0002_alter_domain_unique'), # Required to reference `sites` in `apps.get_model()` 
    ] 

    operations = [ 
     migrations.RunPython(update_site_name), 
    ] 

Hãy chắc chắn rằng bạn đã thiết SITE_ID trong cài đặt của bạn và đổi tên tập tin vào một cái gì đó phù hợp, chẳng hạn như update_site_details.py. Sau đó, chạy ./manage.py migrate để áp dụng các thay đổi :)

Các vấn đề liên quan