diff --git a/pt/css/README.md b/pt/css/README.md index 0b64a606954..adb3222c33d 100755 --- a/pt/css/README.md +++ b/pt/css/README.md @@ -154,9 +154,9 @@ Talvez a gente possa customizar a fonte no nosso cabeçalho? Cole na seção ` ``` -Como antes, cconfira a ordem e coloque antes do link para `blog/static/css/blog.css`. Essa linha irá importar uma fonte chamada *Lobster* do Google Fonts (https://www.google.com/fonts). +Como antes, confira a ordem e coloque antes do link para `blog/static/css/blog.css`. Essa linha irá importar uma fonte chamada *Lobster* do Google Fonts (https://www.google.com/fonts). -Encontre o bloco com a declaração `h1 a` (o código entre chaves `{` and `}`) dentro do arquivo CSS `blog/static/css/blog.css`. Agora adicione a linha `font-family: 'Lobster';` entre as chaves, e atualize a página: +Encontre o bloco com a declaração `h1 a` (o código entre chaves `{` e `}`) dentro do arquivo CSS `blog/static/css/blog.css`. Agora adicione a linha `font-family: 'Lobster';` entre as chaves, e atualize a página: Agora adicione a linha `font-family: 'Lobster';` no CSS do arquivo `static/css/blog.css` dentro do bloco de declaração `h1 a` (o código entre as chaves `{` e `}`) e atualize a página: @@ -173,7 +173,7 @@ h1 a { Incrível! -Como mencionado acima, CSS usa o conceito de classes, que basicamente permite que você nomeie parte do código HTML e aplique estilos apenas à esta parte, sem afetar as outras. É super útil se você tiver duas divs, mas eles estão fazendo algo muito diferente (como o seu cabeçalho e seu post). Uma classe pode ajudar você a fazer com que eles tenham um visual diferente. +Como mencionado acima, CSS usa o conceito de classes, que basicamente permite que você nomeie parte do código HTML e aplique estilos apenas à esta parte, sem afetar as outras. É super útil! Talvez você tenha duas `div`s que estão fazendo algo muito diferente (como o seu cabeçalho e seu post). A classe pode ajudar você a fazer com que eles tenham um visual diferente. Vá em frente e o nomeie algumas partes do código HTML. Adicione uma classe chamada de `page-header` para o `div` que contém o cabeçalho, assim: @@ -286,7 +286,7 @@ Salve esses arquivos e atualize seu site. ![Figure 14.4](images/final.png) -Uhuu! Ficou incrível, né? Olhe para o código que nós acabamos de colar para encontrar os lugares aonde nós adicionamos classes no HTML e as usamos no CSS. Aonde você faria a mudança para que a data ficasse com a cor turquesa ? +Uhuu! Ficou incrível, né? Olhe para o código que nós acabamos de colar para encontrar os lugares aonde nós adicionamos classes no HTML e as usamos no CSS. Aonde você faria a mudança para que a data ficasse com a cor turquesa? Não tenha medo de brincar com esse CSS um pouco e tente mudar algumas coisas. Brincar com o CSS pode ajudar você a entender as diferentes coisas que estão sendo feitas. Se você bagunçar tudo, não se preocupe - você sempre pode voltar atrás! diff --git a/pt/django_forms/README.md b/pt/django_forms/README.md index d5adcc42ac4..680c7d12d15 100755 --- a/pt/django_forms/README.md +++ b/pt/django_forms/README.md @@ -176,9 +176,9 @@ def post_new(request): return render(request, 'blog/post_edit.html', {'form': form}) ``` -Quando nós enviamos o formulário, somos trazidos de volta para a mesma visão, mas desta vez temos mais alguns dados no `request`, mais especificamente em `request.POST` (o nome não tem nada com uma "postagem" de blog , tem a ver com o fato de que estamos "postando" dados). Você se lembra que no arquivo HTML nossa definição de `
` tem a variável `method="POST"`? Todos os campos vindos do "form" estarão disponíveis agora em `request.POST`. Você não deveria renomear `POST` para nada diferente disso (o único outro valor válido para `method` é `GET`, mas nós não temos tempo para explicar qual é a diferença). +Quando nós enviamos o formulário, somos trazidos de volta para a mesma visão, mas desta vez temos mais alguns dados no `request`, mais especificamente em `request.POST` (o nome não tem nada com uma "postagem" de blog, tem a ver com o fato de que estamos "postando" dados). Você se lembra que no arquivo HTML nossa definição de ` ` tem a variável `method="POST"`? Todos os campos vindos do "form" estarão disponíveis agora em `request.POST`. Você não deveria renomear `POST` para nada diferente disso (o único outro valor válido para `method` é `GET`, mas nós não temos tempo para explicar qual é a diferença). -Então, na nossa *view*, nós temos duas situações separadas para lidar. A primeira é quanto acessamos a página pela primeira vez e queremos um formulário em branco. E a segunda, é quando nós temos que voltar para a *view* com todos os dados do formulário que nós digitamos. Desse modo, precisamos adicionar uma condição (usaremos `if` para isso). +Então, na nossa *view*, nós temos duas situações separadas para lidar. A primeira é quando acessamos a página pela primeira vez e queremos um formulário em branco. E a segunda, é quando nós temos que voltar para a *view* com todos os dados do formulário que nós digitamos. Desse modo, precisamos adicionar uma condição (usaremos `if` para isso). {% filename %}blog/views.py{% endfilename %} ```python @@ -188,14 +188,14 @@ else: form = PostForm() ``` -Está na hora de preencher os pontos`[...]`. Se `method` é `POST` então nós queremos construir o `PostForm` com os dados que veem do formulário, certo? Nós iremos fazer assim: +Está na hora de preencher os pontos`[...]`. Se `method` é `POST` então nós queremos construir o `PostForm` com os dados que vêm do formulário, certo? Nós iremos fazer assim: {% filename %}blog/views.py{% endfilename %} ```python form = PostForm(request.POST) ``` -Fácil! A próxima coisa é verificar se o formulário está correto(todos os campos requeridos estão definidos e nenhum valor incorreto foi enviado). Fazemos isso com `form.is_valid()`. +Fácil! A próxima coisa é verificar se o formulário está correto (todos os campos requeridos estão definidos e nenhum valor incorreto foi enviado). Fazemos isso com `form.is_valid()`. Verificamos se o formulário é válido e se estiver tudo certo, podemos salvá-lo! @@ -208,7 +208,7 @@ if form.is_valid(): post.save() ``` - Basicamente, temos duas coisas aqui: salvamos o formulário com `form.save` e adicionados um autor(já que não tinha o campo `author` em `PostForm`, e este campo é obrigatório!). `commit=False` significa que não queremos salvar o modelo `Post` ainda - queremos adicionar autor primeiro. Na maioria das vezes você irá usar `form.save()`, sem `commit=False`, mas neste caso, precisamos fazer isso. `post.save()` irá preservar as alterações (adicionando o autor) e será criada uma nova postagem no blog! + Basicamente, temos duas coisas aqui: salvamos o formulário com `form.save` e adicionados um autor (já que não tinha o campo `author` em `PostForm`, e este campo é obrigatório!). `commit=False` significa que não queremos salvar o modelo `Post` ainda - queremos adicionar autor primeiro. Na maioria das vezes você irá usar `form.save()`, sem `commit=False`, mas neste caso, precisamos fazer isso. `post.save()` irá preservar as alterações (adicionando o autor) e será criada uma nova postagem no blog! Finalmente, seria fantástico se nós pudéssemos imediatamente ir à página `post_detail` da nossa recém-criada postagem no blog, certo? Para fazer isso nós precisamos fazer mais um import: diff --git a/pt/domain/README.md b/pt/domain/README.md index c1a509498d8..23248d0a4f4 100755 --- a/pt/domain/README.md +++ b/pt/domain/README.md @@ -46,7 +46,7 @@ Pode levar alguns minutos para o seu domínio funcionar, então seja paciente! ## Configure o domínio através de um web app na PythonAnywhere. -Você também precisa dizer PythonAnywhere que você deseja usar o seu domínio personalizado. +Você também precisa dizer para o PythonAnywhere que você deseja usar o seu domínio personalizado. Vá para a [página PythonAnywhere contas][7] e atualize sua conta. A opção mais barata (um plano de "Hacker") é bom para começar, você pode sempre atualizá-lo mais tarde quando você ficar super famosa e tiver milhões de acessos. diff --git a/pt/extend_your_application/README.md b/pt/extend_your_application/README.md index 17b0ddee802..6b20edd0172 100755 --- a/pt/extend_your_application/README.md +++ b/pt/extend_your_application/README.md @@ -150,7 +150,7 @@ Será algo parecido com isto: {% endblock %} ``` -Mais uma vez estamos estendendo `base.html`. No bloco `content` queremos exibir o published_date (data de publicação) da postagem (se houver), título e texto. Mas devemos discutir algumas coisas importantes, certo? +Mais uma vez estamos estendendo `base.html`. No bloco `content` queremos exibir o `published_date` (data de publicação) da postagem (se houver), título e texto. Mas devemos discutir algumas coisas importantes, certo? {% raw %}`{% if ... %} ... {% endif %}` é uma tag de template que podemos usar quando queremos verificar algo (Lembra do `if ... else...` do **capítulo introdução ao Python**?). Neste cenário, queremos verificar se `published_date` de uma postagem não está vazia.{% endraw %} @@ -160,7 +160,7 @@ Ok, podemos atualizar nossa página e ver se o `TemplateDoesNotExist`já se foi Yay! Funciona! -## Mais uma coisa: hora de implantar! +# Mais uma coisa: hora de implantar! Seria bom ver se seu site ainda estará trabalhando em PythonAnywhere, certo? Vamos tentar fazer deploy novamente. @@ -182,6 +182,22 @@ $ git pull [...] ``` +## Atualizando os arquivos estáticos no servidor + +Servidores como PythonAnywhere gostam de tratar "arquivos estáticos" (como arquivos CSS) de maneira diferente dos arquivos Python, porque eles podem otimizá-los para que sejam carregados mais rapidamente. Como resultado, sempre que fazemos mudanças nos nossos arquivos de CSS, precisamos executar um comando extra no servidor para informá-los para atualizá-los. O comando é chamado `collectstatic`. + +Comece inicializando seu ambiente virtual, se não tiver inicializado anteriormente (PythonAnywhere usa um comando chamado `workon` para fazer isso, é como o comando `source myenv/bin/activate` que você usa no seu próprio computador): + +{% filename %}command-line{% endfilename %} +``` +$ workon .pythonanywhere.com +(ola.pythonanywhere.com)$ python manage.py collectstatic +[...] +``` + +O comando `manage.py collecstatic` é um pouco parecido com `manage.py migrate`. Fazemos alterações em nosso código e, em seguida, informamos o Django para _aplicar_ essas alterações, seja para a coleção do servidor de arquivos estáticos, seja para o banco de dados. + + E finalmente, pule para a [tab Web](https://www.pythonanywhere.com/web_app_setup/) e aperte **Reload**. E deve ser isso! Parabéns :) diff --git a/pt/template_extending/README.md b/pt/template_extending/README.md index f2edb59772a..0f3f2cfff48 100755 --- a/pt/template_extending/README.md +++ b/pt/template_extending/README.md @@ -118,7 +118,7 @@ Hora de adicionar tags de bloco ("block") nesse arquivo! {% endblock %} ``` -Só falta uma coisa. Nós precisamos fazer a conexão entre esses dois templates. É isso que "extendendo templates" significa! Nós iremos fazer isso adicionando uma tag de extender ("extends") ao início do arquivo. Dessa forma: +Só falta uma coisa. Nós precisamos fazer a conexão entre esses dois templates. É isso que "extendendo templates" significa! Nós iremos fazer isso adicionando uma tag de estender ("extends") ao início do arquivo. Dessa forma: {% filename %}blog/templates/blog/post_list.html{% endfilename %} ```html @@ -139,4 +139,4 @@ Só falta uma coisa. Nós precisamos fazer a conexão entre esses dois templates É isso! Veja se o seu site ainda está funcionando direito :) -> Se ocorrer um erro de `TemplateDoesNotExists`, que diz que não existe nenhum arquivo chamado `blog/base.html` e se você tiver o `runserver` executando no terminal, tenta interrompê-lo (precionando Ctrl+C - o botão Control mais o botão C juntos) e reinicie ele rodando o comando `python manage.py runserver`. +> Se ocorrer um erro de `TemplateDoesNotExists`, que diz que não existe nenhum arquivo chamado `blog/base.html` e se você tiver o `runserver` executando no terminal, tente interrompê-lo (precionando Ctrl+C - o botão Control mais o botão C juntos) e reinicie ele rodando o comando `python manage.py runserver`.